Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni tutte le voci dalla tabella B che hanno una relazione con più voci (elenco fornito) dalla tabella A

Se stai cercando di selezionare in base a un elenco di As (non TUTTI gli As), procedi in questo modo:

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

Sostituisci (1,2) con la tua lista e 2 nella clausola having con il numero di voci dell'elenco.

Se ottieni il tuo elenco di As da una sottoquery, potresti farlo in questo modo (non in MySQL, però...):

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 dovresti inserire il tuo codice di sottoquery due volte e rilasciare la clausola WITH.

Potresti anche usare una tabella temporanea, che porterebbe quindi a selezionare TUTTI Come da quella tabella temporanea e quindi Gordon Linoffs risponde...