Ich erstelle eine Konfigurationstabelle und möchte, dass eine Zeile der Standardwert ist. Zum Beispiel habe ich eine list
Tabelle aller meiner Datenbanken und eine aufgerufene Tabelle, msg
die alle meine Rückgabewerte enthält. In der msg
Tabelle habe ich eine Zeile mit dem Namen 'alldbs' und möchte, dass dieser Wert zurückgegeben wird, wenn für die verknüpfte Datenbank keine weitere Zeile vorhanden ist.
Die Ausgabe sollte also sein:
--LIST TABLE
dbname createdate
-------------------------------------------------- -----------------------
master 2015-06-23 10:05:14.363
model 2015-06-23 10:05:14.363
msdb 2015-06-23 10:05:14.363
tempdb 2015-06-23 10:05:14.363
dummy 2015-06-23 10:05:14.363
--MSG Table
dbname msgval
-------------------------------------------------- --------------------
alldbs Message 1
dummy Message 2
--DESIRED OUTPUT
dbname msgval
-------------------------------------------------- --------------------
dummy Message 2
master Message 1
model Message 1
msdb Message 1
tempdb Message 1
Jetzt kann ich das Ergebnis erhalten, aber die Abfrage ist klobig und es scheint, dass es einen besseren Weg geben sollte:
select
a.dbname
,b.msgval
from
list a
join msg b on a.dbname = b.dbname
union all
select
a.dbname
,b.msgval
from
list a
,msg b
where
a.dbname not in (select dbname from msg)
and b.dbname = 'alldbs'
Gibt es eine effizientere Möglichkeit, diese Abfrage zu schreiben?
SQLFiddle Link mit SQL 2014.
quelle
Verwenden einer Unterauswahl, um die fehlende Nachricht abzurufen:
quelle