MySQLベースのDBで次のクエリを試行しています。
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;
私の意図は、同じパネルにデータを表示するだけで、切り替えを停止できるようにすることです。ただし、次のエラーが発生します。
エラーコード:1250。いずれかのSELECTからのテーブル '注釈'をフィールドリストで使用できません
2つのクエリにUNION
の互換性を持たせるには、2番目のクエリの列リストにNULL
sを入力して、最初のクエリの長さと一致させます。最初の列の型が一致することを確認するには、それらを明示的にcast()
にchar
にすることができます。 (すでに互換性のあるタイプの場合はオプションです。)
UNION
(ALL
なし)は重複を排除しようとするため、UNION ALL
も使用します。
そして、ORDER BY
は結果セット全体ではなく結果FROM grafana.annotatio
を意図したものだと思います。 MySQLにそれを知らせるには、2番目のクエリを括弧で囲みます。
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);
両方のクエリが1行を返す場合、それらをクロス結合して、結果を並べて表示することもできます。
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;