我在这里做错了什么,因为我试图在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) ));
1条答案
按热度按时间woobm2wo1#
括号用于子查询,然后必须为每个子查询指定一个别名,就像错误所建议的那样。例子:
更重要的是,当你使用
UNION
,两个查询中的所有字段必须完全匹配。您的to查询具有完全不同的字段。编辑
UNION
是将第一个查询的结果添加到第二个查询的结果。在您的例子中,您不是要将结果添加到一起,而是要将字段添加到一起。为此,可以使用联接或子查询。使用子查询尝试此操作:我将您的第一个查询作为子查询。它给出了第一个count字段。我叫它
my_count
但是你可以把它改成你喜欢的任何东西。为了将两个查询连接在一起,需要提供连接条件,因此我添加了条件
s2.id = s.id
你的第一个问题。我不知道你为什么
LIMIT 1
在第二个查询的末尾。这会给你一张最大的唱片id
.