簡體   English   中英

mysql union get back Error 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 命令返回不同數量的字段

我沒有計划如何解決這個問題...

最好的問候基多

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
 保存時間_溫度 | 平均溫度 |  Rainc:------------------ |  ----------------: |  -----: 2020-01-31 00:10:00 |  9.011111047532824 |  0.0000

db<> 在這里擺弄

您需要相同數量的列和匹配的數據類型。如果您沒有足夠的列,請添加 null 列

 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM