J'essaie la requête suivante dans une base de données 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;
Mon intention est de simplement obtenir les données affichées dans le même panneau afin que je puisse arrêter de basculer. Cependant, j'obtiens l'erreur suivante:
Code d'erreur: 1250. La table 'annotation' de l'un des SELECT ne peut pas être utilisée dans la liste des champs
Pour rendre les deux requêtes compatibles pour un UNION
remplissez la liste des colonnes du second avec NULL
s pour correspondre à la longueur de celle du premier. Pour être sûr que les types de la première colonne correspondent, vous pouvez explicitement les cast()
les char
. (Facultatif s'ils sont déjà de types compatibles.)
Utiliser aussi UNION ALL
parce que UNION
(sans ALL
) tente d'éliminer les doublons.
Et je suppose que le ORDER BY
était destiné au résultat FROM grafana.annotatio
pas pour l'ensemble des résultats. Pour que MySQL le sache, mettez la deuxième requête entre parenthèses.
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);
Si les deux requêtes renvoient une ligne, vous pouvez également les croiser pour obtenir les résultats côte à côte.
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;