Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich alle Einträge aus Tabelle B, die eine Beziehung zu mehreren Einträgen (vorgegebene Liste) aus Tabelle A haben

Wenn Sie basierend auf einer Liste von As (nicht ALLEN As) auswählen möchten, gehen Sie folgendermaßen vor:

SELECT b_id
FROM ab
WHERE a_id IN (1,2)
GROUP BY b_id
HAVING COUNT(a_id) = 2

Ersetzen Sie (1,2) mit deiner Liste und 2 in der having-Klausel mit der Anzahl der Listenelemente.

Wenn Sie Ihre Liste von As aus einer Unterabfrage erhalten, könnten Sie es so machen (allerdings nicht in MySQL ...):

WITH subquery (
 --subquery code here
)

SELECT b_id
FROM ab
WHERE a_id IN subquery
GROUP BY b_id
HAVING COUNT(a_id) = (SELECT COUNT(*) FROM subquery)

In MySQL müssten Sie Ihren Unterabfragecode zweimal einfügen und die WITH-Klausel weglassen.

Sie könnten auch eine temporäre Tabelle verwenden, was dann dazu führen würde, ALLE As aus dieser temporären Tabelle auszuwählen, und somit Gordon Linoffs Antwort ...