MySQL gibt nur Zeilen zurück, die existieren. Um fehlende Zeilen zurückzugeben, müssen Sie zwei Tabellen haben.
Die erste Tabelle kann temporär (sitzungs-/verbindungsspezifisch) sein, sodass mehrere Instanzen gleichzeitig ausgeführt werden können.
create temporary table tmpMustExist (text id);
insert into tmpMustExist select "ida";
insert into tmpMustExist select "idb";
-- etc
select a.id from tmpMustExist as a
left join table b on b.id=a.id
where b.id is null; -- returns results from a table that are missing from b table.
Ist dies möglich, mit einer einzigen SQL-Abfrage?
Nun, ja ist es. Lassen Sie mich dazu arbeiten, zuerst mit einem union all
die select
Aussagen zu kombinieren.
create temporary table tmpMustExist (text id);
insert into tmpMustExist select "ida" union all select "idb" union all select "etc...";
select a.id from tmpMustExist as a left join table as b on b.id=a.id where b.id is null;
Bitte beachte, dass ich union all
verwenden, die ein bisschen schneller als union
ist, weil es über die Deduplizierung überspringt.
Sie können create table
... select
verwenden. Ich mache das häufig und mag es wirklich. (Es ist eine gute Möglichkeit, einen Tisch und zu kopieren, aber es wird Indizes löschen.)
create temporary table tmpMustExist as select "ida" union all select "idb" union all select "etc...";
select a.id from tmpMustExist as a left join table as b on b.id=a.id where b.id is null;
Und schließlich können Sie verwenden, was eine „abgeleitete“ Tabelle nennt das Ganze in einem einzigen, tragbaren wählen zu bringen Erklärung.
select a.id from (select "ida" union all select "idb" union all select "etc...") as a left join table as b on b.id=a.id where b.id is null;
Hinweis: Die as
Schlüsselwort ist optional, aber stellt klar, was ich mit a
und b
mache. Ich bin einfach nur kurze Namen zu schaffen, um in den join
und select
Feldlisten
Sie können dies einfach in Ihrem Anwendungscode tun. Welche Programmiersprache verwenden Sie? – tadman
Klingt wie 'WHERE id NICHT IN ('ida', 'idb', 'idc')' –
Art von 'SELECT a.id FROM input_set eine LINKE JOIN-Tabelle b ON a.id = b.id WO b.id ist NULL – Serg