将多个mysql查询合并为一个输出

bksxznpy  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(292)

我在这里做错了什么,因为我试图在1个查询中获得下面两个查询的所有输出,即,
count(centerpoint\u stream\u stable)、date、website\u online、icecast\u source\u online、icecast\u source\u ip、icecast\u no\u listeners、centerpoint\u online、centerpoint\u connection、centerpoint\u stream\u stable、centerpoint\u stream\u status、horsleypark\u online、horsleypark\u connection、horsleypark\u stream\u stable、horsleypark\u stream\u status、local\u primary\u online,本地\u主\u internet \u ping,本地\u主\u instreamer \u online,本地\u次\u internet \u online,本地\u次\u internet \u ping,本地\u次\u instreamer \u online,系统\u ok我要合并的两个查询是

select count(centerpoint_stream_stable) from status_log where  centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and  date > date_sub(now(), interval 1 minute) ;

以及

SELECT date, website_online, icecast_source_online, icecast_source_ip, icecast_no_listeners, centerpoint_online, centerpoint_connection, centerpoint_stream_stable,centerpoint_stream_status,  horsleypark_online, horsleypark_connection,horsleypark_stream_stable,horsleypark_stream_status, local_primary_internet_online,local_primary_internet_ping, local_primary_instreamer_online,local_secondary_internet_online,local_secondary_internet_ping,local_secondary_instreamer_online,system_ok FROM status_log ORDER BY id DESC LIMIT 1;

以上两个查询的并集产生以下错误;
错误1248(42000):每个派生表都必须有自己的别名

(select * from (select 
        date, 
    website_online, 
    icecast_source_online, 
    icecast_source_ip, 
    icecast_no_listeners, 
    centerpoint_online, 
    centerpoint_connection,     
    centerpoint_stream_stable,
    centerpoint_stream_status,      
    horsleypark_online, 
    horsleypark_connection,
    horsleypark_stream_stable,
    horsleypark_stream_status, 
    local_primary_internet_online,
    local_primary_internet_ping,        
    local_primary_instreamer_online,    
    local_secondary_internet_online,    
    local_secondary_internet_ping,
    local_secondary_instreamer_online,
    system_ok
FROM status_log ORDER BY id DESC LIMIT 1))

union all
(select * from (select count(centerpoint_stream_stable) from status_log where  centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and  date > date_sub(now(), interval 1 minute) ));
woobm2wo

woobm2wo1#

括号用于子查询,然后必须为每个子查询指定一个别名,就像错误所建议的那样。例子:

(SELECT id FROM table1) a
UNION
(SELECT id FROM table2) b

更重要的是,当你使用 UNION ,两个查询中的所有字段必须完全匹配。您的to查询具有完全不同的字段。
编辑 UNION 是将第一个查询的结果添加到第二个查询的结果。在您的例子中,您不是要将结果添加到一起,而是要将字段添加到一起。为此,可以使用联接或子查询。使用子查询尝试此操作:

SELECT (SELECT COUNT (s2.centerpoint_stream_stable)
        FROM status_log s2
        WHERE s2.id = s.id
          AND s2.centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream'
          AND s2.date > date_sub(NOW(), INTERVAL 1 MINUTE)) AS my_count,

       s.date, s.website_online, s.icecast_source_online, s.icecast_source_ip,
       s.icecast_no_listeners, s.centerpoint_online, s.centerpoint_connection,
       s.centerpoint_stream_stable, s.centerpoint_stream_status,  s.horsleypark_online,
       s.horsleypark_connection, s.horsleypark_stream_stable, s.horsleypark_stream_status,
       s.local_primary_internet_online, s.local_primary_internet_ping,
       s.local_primary_instreamer_online, s.local_secondary_internet_online,
       s.local_secondary_internet_ping, s.local_secondary_instreamer_online, s.system_ok
FROM status_log s
ORDER BY id DESC
LIMIT 1;

我将您的第一个查询作为子查询。它给出了第一个count字段。我叫它 my_count 但是你可以把它改成你喜欢的任何东西。
为了将两个查询连接在一起,需要提供连接条件,因此我添加了条件 s2.id = s.id 你的第一个问题。
我不知道你为什么 LIMIT 1 在第二个查询的末尾。这会给你一张最大的唱片 id .

相关问题