2017-06-28 6 views
0

Previous Solution for one ValueMySQL: Zurückgeben Mehrere Werte, auch wenn keine Ergebnisse

Gibt es eine Möglichkeit, mehrere NULL oder ‚nan‘ Werte zurück, wenn wir eine Abfrage mit mehreren ID-Werte haben? Mit anderen Worten, wenn eine Tabelle eine datetime "ID" hat, die ein Primärschlüssel ist. Es erhöht sich in Ticks von einer Sekunde. Einige dieser Sekunden (Einträge) fehlen und Sie möchten 'nan' oder 'empty' zurückgeben, sobald Sie einen großen Bereich von IDs abgefragt haben.

Arbeits-Code für einen Wert:

SELECT ID FROM TABLE WHERE ID in ('2017-06-29 23:10:00') UNION ALL (SELECT 'nan') LIMIT 1 

Der Versuch, dynamische Abfrage für mehrere Werte zu erreichen. In diesem Beispiel habe ich drei IDs abfragen, aber die Liste kann zu Tausenden wachsen - nicht arbeit Beispiel:

SELECT ID FROM TABLE WHERE ID in ('2017-06-29 23:10:00', '2017-06-29 23:10:01','2017-06-30 00:11:03') UNION ALL (SELECT 'nan') LIMIT 1 
+1

Wenn ich richtig verstehe, haben Sie eine [SQL "Lücken-und-Inseln"] (https://stackoverflow.com/questions/tagged/gaps-and-islands+sql) Problem. Viele Fragen beschäftigen sich mit "fehlenden Tagen" in Datenreihen. Ihr Problem ist im Wesentlichen das Gleiche, außer dass Sie Sekunden verpassen. – pilcrow

+0

Das ist richtig. – user7769718

+0

Können Sie den Tabelleninhalt und die gewünschten Ergebnisse anzeigen? – Barmar

Antwort

1

ein UNION Verwenden Sie eine Tabelle mit allen IDs, die Sie vergleichen wollen zu synthetisieren, dann links verbinden dies mit der echte Tisch. Wenn keine Übereinstimmung in der Tabelle vorhanden ist, wird LEFT JOIN in NULL für seine Spalten angezeigt, und Sie können dies testen und den Standardwert anzeigen.

SELECT IFNULL(t2.id, 'nan') AS id 
FROM (SELECT '2017-06-29 23:10:00' as id 
     UNION ALL 
     SELECT '2017-06-29 23:10:01' 
     UNION ALL 
     SELECT '2017-06-29 23:10:02') AS t1 
LEFT JOIN TABLE AS t2 ON t1.id = t2.id 

Siehe What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?, wie Sie den Prozess der Erstellung der Tabelle mit allen Zeitstempel automatisieren können.

+0

Danke, aber ich bin mir nicht sicher, dass das den Trick machen wird. Ich werde die Frage mit mehr Klarstellung aktualisieren. – user7769718

+0

Sie suchen also mehrere Zeilen, nicht mehrere Spalten? – Barmar

+0

Ich habe die Antwort mit einem anderen Ansatz aktualisiert. – Barmar

Verwandte Themen