2016-10-07 21 views
1

ich Ich möchte auch die c.category, wenn p.ptype ist nicht in dem Satz von c.ptypeMit DISTINCT mit FIND_IN_SET

DISTINCT (p.ptype) zur gleichen Zeit wählenden

Datenbanktabelle : p

id ptype 
1 Shirts 
2 Cups 
3 Shirts 
4 Mugs 

Database Tabelle: c

id category ptype 
1 Test  Pants, Shirts, TShirts 
2 Test1  Cups, Mats, Rugs 

Der SQL-Befehl ist, habe ich versucht, wie folgt

SELECT DISTINCT(p.ptype), IF(FIND_IN_SET(p.ptype, c.ptype), c.category,'') as category 
FROM p, c 

Dies gibt p.type aus, die zweimal gesetzt sind. Einmal mit leerem c.category-Feld und einmal mit gefülltem c.category.

jedoch die gewünschte Ausgabe ist wie folgt

ptype category 
Shirts Test 
Cups  Test1 
Mugs 

Antwort

2

Versuchen Sie eine explizite LEFT JOIN auf dem ptype vom p Tabelle zu tun ist in der CSV-Liste in der c Tabelle:

SELECT DISTINCT p.ptype, COALESCE(c.category, '') AS category 
FROM p 
LEFT JOIN c 
    ON FIND_IN_SET(p.ptype, c.ptype) > 0 

In Ihrem ursprüngliche Abfrage, machten einen Cross-Join. Dies erzeugt alle möglichen Kombinationen zwischen den Datensätzen der beiden Tabellen. Es wäre schwierig, die richtige Antwort mit einem Kreuz-Join zu erhalten, daher ist ein Link-Join vorzuziehen.

Demo hier:

SQLFiddle