Vyberte si z tabulky v závislosti na položkách v druhé tabulce

hlasů
5

Jedná se o nastavení:

Tabulka A je připojen k tabulce B. Existují různé položky (0 až n) v tabulce B, které mohou mít odpovídající záznam v tabulce A.

Jak vznikají I dotaz, který mi dává záznamu z tabulky A pouze tehdy, když určité množství vyhledaných záznamů neexistuje v tabulce B?

Příklad:

Tabulka A má oblečení v něm. Tabulka B má atributy pro oblečení.

Tabulka B má cizí klíč do tabulky A tak to bude vypadat nějak takto:

id  fid_clothing1  attributeA
id  fid_clothing1  attributeB
id  fid_clothing1  attributeC
id  fid_clothing2  attributeA
id  fid_clothing2  attributeB

Teď chci jen oblečení, které mají atribut attributeAA attributeBAND attributeC. To není problém, pokud dělám or-dotazu, ale nemohu prostě něco takového:

SELECT * from tableA
LEFT JOIN tableB on tableB.fid_cloting = tableA.id
WHERE attribute='A' AND attribute='B' AND attribute='C'

Tato podmínka se nikdy vyhodnotit na hodnotu true. Jak to udělám?

Položena 26/08/2009 v 23:34
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
2

Dalo by se to udělat s 3 vnitřní spojení ... tedy dej mi řádky tabulky A, které mají atributy, které chci

SELECT A.id FROM tableA A
INNER JOIN tableB BA ON A.id = BA.fid_clothing AND BA.Attribute='A'
INNER JOIN tableB BB ON A.id = BB.fid_clothing AND BB.Attribute='B'
INNER JOIN tableB BC ON A.id = BC.fid_clothing AND BC.Attribute='C'
GROUP BY A.id
Odpovězeno 26/08/2009 v 23:52
zdroj uživatelem

hlasů
1

Chtěl bych použít GROUP_CONCATnačíst jeden řádek všechny atributy pro daný kus oděvu:

SELECT id,GROUP_CONCAT(attribute order by attribute) as Attributes 
FROM tableB 
GROUP BY id;

Dát něco jako:

| id | Attributes |
|  1 | A,B,C      |

Z tohoto výsledný soubor, můžete vybrat ty identifikátory, u nichž dlouhých atribut uzavřeno sadu atributů, které hledali.

select id z MyConcatenatedResults kde Atributy = 'A, B, C'

Odpovězeno 27/08/2009 v 10:58
zdroj uživatelem

hlasů
0

Dalším způsobem, jak toho dosáhnout, je takto, což vyžaduje nulu připojí, ale vnořené sub-query ... mají pokusy tento na fiktivní databáze, a zdá se, že dělat svou práci. Doufám, že to pomůže.

SELECT * 
Z TABLEA A 
WHERE id IN ( 
              SELECT clothing_id
              Z TableB B
              KDE
                atribut = "A"
                OR atribut = "B"
                OR atribut = "C"
              GROUP BY clothing_id
              S počet (*) = 3
            )
Odpovězeno 27/08/2009 v 09:06
zdroj uživatelem

hlasů
0

Může být tohle .. si to vyzkoušet

SELECT * FROM TABLEA a, TABLE b 
WHERE a.id = b.clothing_id 
AND a.id in (SELECT clothing_id from TABLEB where attribute = 'A' AND clothing_id = a.id
UNION select clothing_id from TABLEB where attribute = 'B' AND clothing_id = a.id
UNION select clothing_id from TABLEB where attribute = 'C' AND clothing_id = a.id)
Odpovězeno 27/08/2009 v 04:31
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more