mysql union 返回错误 1022 — 我该如何解决这个问题?
mysql union get back Error 1022 — How can i fixed this?
我的天气方案有两个不同的表格降雨量和室外温度。
我试试这个:
SELECT
savetime
,UNIX_TIMESTAMP(savetime) as unixt
,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc
from rainfall
union
Select
savetime
,avg(weatherdata)as temp
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
group by day(savetime)
但是取回失败:
#1222 - SELECT 命令使用了 return 不同数量的字段
我没有计划如何解决这个问题...
此致
基多
UNION 必须具有相同数量的列,因此添加 simpo,y alos unixtome 列就可以了
SELECT
savetime,
UNIX_TIMESTAMP(savetime) AS unixt,
(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc
,''
FROM
rainfall
UNION SELECT
savetime,
UNIX_TIMESTAMP(savetime) AS unixt,
,''
AVG(weatherdata) AS temp
FROM
outside_temp
WHERE
savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY DAY(savetime)
CREATE TABLE outside_temp (
`savetime` DATETIME,
`weatherdata` FLOAT,
`newflag` INTEGER
);
INSERT INTO outside_temp
(`savetime`, `weatherdata`, `newflag`)
VALUES
('2020-01-31 01:10:00', '8.9', '1'),
('2020-01-31 03:25:00', '8.9', '1'),
('2020-01-31 05:40:00', '9.1', '1'),
('2020-01-31 00:10:00', '8.8', '1'),
('2020-01-31 04:25:00', '9.3', '1'),
('2020-01-31 00:55:00', '9', '1'),
('2020-01-31 01:25:00', '8.9', '1'),
('2020-01-31 00:25:00', '8.9', '1'),
('2020-01-31 04:10:00', '9.3', '1');
CREATE TABLE rainfall (
`savetime` VARCHAR(34),
`raincounter` INTEGER,
`counteramount` INTEGER,
`israining` INTEGER,
`newflag` INTEGER
);
INSERT INTO rainfall
(`savetime`, `raincounter`, `counteramount`, `israining`, `newflag`)
VALUES
('2020-01-31 09:10:00', '2016', '37290', '0', '1'),
('2020-01-31 16:56:00', '2016', '37290', '0', '1'),
('2020-01-31 07:40:00', '2016', '37290', '0', '1'),
('2020-01-31 05:10:00', '2016', '37290', '0', '1'),
('2020-01-31 11:11:00', '2016', '37290', '0', '1'),
('2020-01-31 15:11:00', '2016', '37290', '0', '1'),
('2020-01-31 20:56:00', '2016', '37290', '0', '1'),
('2020-01-31 11:41:00', '2016', '37290', '0', '1'),
('2020-01-31 08:55:00', '2016', '37290', '0', '1'),
('2020-01-31 15:41:00', '2016', '37290', '0', '1'),
('2020-01-31 12:11:00', '2016', '37290', '0', '1');
SELECT
savetime_temp
,AVG_temp
,rainc
FROM
(SELECT
DATE(savetime) DAY_temp
,MIN(savetime) savetime_temp
,AVG(weatherdata) AS AVG_temp
FROM
outside_temp
WHERE
savetime >= DATE_SUB(CURDATE(), INTERVAL 360 DAY)
GROUP BY DAte(savetime)) t1
INNER JOIN
(SELECT
DATE(savetime) DAY_rainc
,MIN(savetime) savetime_rainc
,(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc
FROM
rainfall
GROUP BY DAte(savetime)) t2
ON t1.DAY_temp = t2.DAY_rainc
savetime_temp | AVG_temp | rainc
:------------------ | ----------------: | -----:
2020-01-31 00:10:00 | 9.011111047532824 | 0.0000
db<>fiddle here
您需要相同数量的列和匹配的数据类型.. 如果您没有足够的列,请添加空列
SELECT
day(savetime)
,UNIX_TIMESTAMP(savetime) as unixt
,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc
, null temp
from rainfall
group by day(savetime)
union
Select
day(savetime)
, null
, null
,avg(weatherdata)
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
group by day(savetime)
我的天气方案有两个不同的表格降雨量和室外温度。
我试试这个:
SELECT
savetime
,UNIX_TIMESTAMP(savetime) as unixt
,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc
from rainfall
union
Select
savetime
,avg(weatherdata)as temp
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
group by day(savetime)
但是取回失败: #1222 - SELECT 命令使用了 return 不同数量的字段
我没有计划如何解决这个问题...
此致 基多
UNION 必须具有相同数量的列,因此添加 simpo,y alos unixtome 列就可以了
SELECT
savetime,
UNIX_TIMESTAMP(savetime) AS unixt,
(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc
,''
FROM
rainfall
UNION SELECT
savetime,
UNIX_TIMESTAMP(savetime) AS unixt,
,''
AVG(weatherdata) AS temp
FROM
outside_temp
WHERE
savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY DAY(savetime)
CREATE TABLE outside_temp ( `savetime` DATETIME, `weatherdata` FLOAT, `newflag` INTEGER ); INSERT INTO outside_temp (`savetime`, `weatherdata`, `newflag`) VALUES ('2020-01-31 01:10:00', '8.9', '1'), ('2020-01-31 03:25:00', '8.9', '1'), ('2020-01-31 05:40:00', '9.1', '1'), ('2020-01-31 00:10:00', '8.8', '1'), ('2020-01-31 04:25:00', '9.3', '1'), ('2020-01-31 00:55:00', '9', '1'), ('2020-01-31 01:25:00', '8.9', '1'), ('2020-01-31 00:25:00', '8.9', '1'), ('2020-01-31 04:10:00', '9.3', '1');
CREATE TABLE rainfall ( `savetime` VARCHAR(34), `raincounter` INTEGER, `counteramount` INTEGER, `israining` INTEGER, `newflag` INTEGER ); INSERT INTO rainfall (`savetime`, `raincounter`, `counteramount`, `israining`, `newflag`) VALUES ('2020-01-31 09:10:00', '2016', '37290', '0', '1'), ('2020-01-31 16:56:00', '2016', '37290', '0', '1'), ('2020-01-31 07:40:00', '2016', '37290', '0', '1'), ('2020-01-31 05:10:00', '2016', '37290', '0', '1'), ('2020-01-31 11:11:00', '2016', '37290', '0', '1'), ('2020-01-31 15:11:00', '2016', '37290', '0', '1'), ('2020-01-31 20:56:00', '2016', '37290', '0', '1'), ('2020-01-31 11:41:00', '2016', '37290', '0', '1'), ('2020-01-31 08:55:00', '2016', '37290', '0', '1'), ('2020-01-31 15:41:00', '2016', '37290', '0', '1'), ('2020-01-31 12:11:00', '2016', '37290', '0', '1');
SELECT savetime_temp ,AVG_temp ,rainc FROM (SELECT DATE(savetime) DAY_temp ,MIN(savetime) savetime_temp ,AVG(weatherdata) AS AVG_temp FROM outside_temp WHERE savetime >= DATE_SUB(CURDATE(), INTERVAL 360 DAY) GROUP BY DAte(savetime)) t1 INNER JOIN (SELECT DATE(savetime) DAY_rainc ,MIN(savetime) savetime_rainc ,(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc FROM rainfall GROUP BY DAte(savetime)) t2 ON t1.DAY_temp = t2.DAY_rainc
savetime_temp | AVG_temp | rainc :------------------ | ----------------: | -----: 2020-01-31 00:10:00 | 9.011111047532824 | 0.0000
db<>fiddle here
您需要相同数量的列和匹配的数据类型.. 如果您没有足够的列,请添加空列
SELECT
day(savetime)
,UNIX_TIMESTAMP(savetime) as unixt
,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc
, null temp
from rainfall
group by day(savetime)
union
Select
day(savetime)
, null
, null
,avg(weatherdata)
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
group by day(savetime)