sql >> Databáze >  >> RDS >> Mysql

Získejte všechny položky z tabulky B, které mají vztah k více položkám (daný seznam) z tabulky A

Pokud chcete vybírat na základě seznamu jako (ne ALL As), udělejte to takto:

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

Nahraďte (1,2) s vaším seznamem a 2 v klauzuli have s počtem položek seznamu.

Pokud svůj seznam As získáte z dílčího dotazu, můžete to udělat takto (ne však v 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)

V MySQL byste museli vložit kód poddotazu dvakrát a vypustit klauzuli WITH.

Můžete také použít dočasnou tabulku, která by pak vedla k výběru VŠECHNY jako z této dočasné tabulky a tedy odpověď Gordona Linoffa...



  1. Seskupit podle počtu (nejlepších 5) a počtu (všechny ostatní)

  2. Pomoc s:ERROR 1025 (HY000):Chyba při přejmenování .... (chyba:150)

  3. Proč je toto připojení Hibernate MySQL pouze pro čtení?

  4. postgres sloupec X neexistuje