Wählen Sie aus der Tabelle je nach Einträgen in anderer Tabelle
Dies ist das setup:
Tabelle A hat eine Verbindung zu Tabelle B. gibt Es mehrere Einträge (0 bis n) in der Tabelle B haben kann, dass ein passender Datensatz in Tabelle A.
Wie kann ich eine Abfrage gibt mir einen Datensatz aus Tabelle A nur, wenn eine bestimmte Menge der übereinstimmenden Datensätze vorhanden sind, in Tabelle B?
Beispiel:
Tabelle A hat Kleidung in ihm. Tabelle B hat Attribute für die Kleidung.
Tabelle B hat einen Fremdschlüssel für die Tabelle Ein, so würde es in etwa so Aussehen:
id fid_clothing1 attributeA
id fid_clothing1 attributeB
id fid_clothing1 attributeC
id fid_clothing2 attributeA
id fid_clothing2 attributeB
Nun, ich möchte nur die Kleidung, die Attribut attributeA
UND attributeB
UND attributeC
. Dies ist nicht ein problem, wenn ich eine ODER-Abfrage, aber ich kann nicht einfach so etwas machen:
SELECT * from tableA
LEFT JOIN tableB on tableB.fid_cloting = tableA.id
WHERE attribute='A' AND attribute='B' AND attribute='C'
Diese Bedingung wird nie zu true ausgewertet werden. Wie mache ich das?
- Sie Sollten die Verwendung Mit clouse ich Denke So
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man es machen, mit 3 inner joins... also gib mir Tabelle A die Zeilen mit den Attributen möchte ich
Ich würde
GROUP_CONCAT
zum Holen einer einzelnen Zeile von allen Parametern für ein bestimmtes Kleidungsstück:Etwas geben wie:
Aus dieser Ergebnismenge, könnten Sie wählen Sie diejenigen, die ids, für die die verketteten Attribut passte zum setzen der Attribute, die Sie suchen.
select id from MyConcatenatedResults, wo Attribute = 'A -, B -, C'
Kann diese.. haben, es zu versuchen
Einen anderen Weg, dies zu tun ist wie folgt, das erfordert null verbindet, sondern eine geschachtelte sub-query... habe versucht diese auf eine dummy-Datenbank, und es scheint, um den job zu erledigen. Hoffe, es hilft.