我正在基于 MySQL 的数据库中尝试以下查询:
SELECT
alert.name, alert.new_state_date, alert.prev_state_date
FROM
grafana.alert
WHERE
alert.id = 1
UNION SELECT
annotation.epoch
FROM
grafana.annotation
ORDER BY annotation.id DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
我的目的是让数据显示在同一个面板中,这样我就可以停止来回切换。但是,我收到以下错误:
错误代码:1250。来自 SELECT 之一的表“注释”不能在字段列表中使用
为了使两个查询兼容 a,UNION请用 s 填充第二个查询的列列表NULL,以匹配第一个查询的长度。为了确保第一列的类型匹配,您可以将cast()它们显式地设置为char. (如果它们已经是兼容类型,则可选。)
还可以使用UNION ALLbecause UNION(without ALL)尝试消除重复项。
我猜这ORDER BY是针对结果FROM grafana.annotatio而不是整个结果集。为了让 MySQL 知道这一点,请将第二个查询放在括号中。
SELECT cast(alert.name AS char),
alert.new_state_date,
alert.prev_state_date
FROM grafana.alert
WHERE alert.id = 1
UNION ALL
(SELECT cast(annotation.epoch AS char),
NULL,
NULL
FROM grafana.annotation
ORDER BY annotation.id DESC
LIMIT 1);
Run Code Online (Sandbox Code Playgroud)
如果两个查询都返回一行,您还可以交叉连接它们,以便并排显示结果。
SELECT *
FROM (SELECT alert.name,
alert.new_state_date,
alert.prev_state_date
FROM grafana.alert
WHERE alert.id = 1) x
CROSS JOIN (SELECT annotation.epoch
FROM grafana.annotation
ORDER BY annotation.id DESC
LIMIT 1) y;
Run Code Online (Sandbox Code Playgroud)