![]() |
Datenbank: mySQL • Version: 5.6 • Zugriff über: UniDAC
mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Ich möchte mir Werte aus Tabelle A anzeigen lassen, zusätzlich möchte ich ein Feld OK haben. Das Feld OK soll mir sagen, ob alle Werte, die ich aus einem select der Tabelle B bekomme auch in der Tabelle C vorhanden sind. Das Feld OK darf gern irgendeinen Inhalt haben für OK und NULL für nicht OK.
Mein Ansatz war dieser hier, aber der ist glaub nicht richtig
SQL-Code:
select *
, (select ID from B where ID = ALL (select ID from C) ) as OK from A |
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Aus deiner Beschreibung wird nicht ganz klar in welchem Zusammenhang A und B oder A und C stehen...
Probiere es mal so :gruebel::
Code:
SELECT *,
(SELECT count(*) FROM b WHERE b.id IN (SELECT id FROM c)) - (SELECT count(*) FROM b WHERE b.id NOT IN (SELECT id FROM c)) FROM A |
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Danke, natürlich ist die Abfrage um einiges komplexer als hier beschrieben, was mich glaub auch etwas betriebsblind gemacht hat. Ich denke mit Count und not in müsste ich ans Ziel kommen. Ich tüftel an diesem Scheiß seit 2 Tagen rum, ich dreh langsam am Rad. Brauchte jetzt einfach jemand, der mich auf den richtigen Pfad bringt.:kiss:
|
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
SQL-Code:
wäre eine Möglichkeit.
select
(select Count distinct(*) from b where ..)=(select Count distinct(*) from b where ...) OK from Eigentlich ist "in" untauglich da sowohl für 1,2,3 als auch für 5,6 in (1,2,3,4,5,6,7,8,9) erfüllt ist. Gruß K-h |
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Ich prüf jetzt auf Count not in, wenn Count = 0 dann ists OK, sonst ists nicht OK. Funktioniert.
|
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Du willst doch eigentlich prüfen, ob zwei Listen identisch sind, oder? Die erste Liste ist B und die zweite Liste sind alle Elemente aus C, die auch in B sind.
SQL-Code:
Das liefert dir alle Werte, die nur in B oder C vorkommen. Ist das Ergebnis leer, sind beide Listen identisch. Damit solltest Du zum Ziel kommen.
select ID from B
except select C.ID from C join B on C.ID=B.ID
SQL-Code:
select *,
if (exists ( select ID from B except select C.ID from C join B on C.ID=B.ID ) ,'Not OK' ''OK') from A |
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Nein, alle Werte aus Tabelle B müssen in Tabelle C sein, Tabelle C beinhaltet mehr Werte als in B sind.
|
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
vielleicht so...
SQL-Code:
vergessen... Ergebnis = null => B ist Teilmenge von C
select b.key from tableC c
right join tableB b on (c.key = b.key) where c.key is null |
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
also ibp hat Recht, Werte, die gleich sein müssen, sind doch in SQL klassischer Weise Joins!
Ich würde es nur ohne Where Kriterium machen. Sie will ja alle Werte haben.
Code:
select b.*, IFNULL(c.wert,'NOK') as OkSpalte from b left join c on b.wert=c.wert
|
AW: mySQL-Abfrage, OK, wenn alle Werte in Liste gefunden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz