wie man mehr Wahr / Falsch-Reihen in MYSQL kombinieren
-
26-09-2019 - |
Frage
Ich habe eine Abfrage mit einem Join auf einem Tisch verschiedene Wahr / Falsch-Spalten enthalten. Ich kann DISTINCT & GROUP BY erzwingen nur einzelne eindeutige Zeile wird zurückgegeben, aber die wahr / falsch Zeilen verhalten sich nicht vorhersagbar, um sicherzustellen, Beispiel:
**Table 1**
loc_id name
-------------
1 a
2 b
3 c
4 d
**Table 2**
prod_id loc_id value
-------------
1 1 abc
2 1 bcd
3 1 def
4 2 fgh
**Table 3**
prod_id flag
-------------
1 0
2 0
3 1
4 1
SELECT DISTINCT name, flag from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id
Das gibt mir Zeilen eine Liste von loc Namen enthalten. Allerdings ist die Flag-Spalte kehrt mehr Zeilen manchmal, ich mag das tun, was würde, ist diese Zeilen zu kombinieren, so dass, wenn es mehr als eins ist, und sie enthalten beide 0 und 1 die Abfrage nur eine Zeile mit Flag auf 1 gesetzt zurückkehren Wenn mehrere Zeilen enthalten 0, es 0 für diese Zeile zurück ... Ich habe versucht, BY Namen GROUP, die eindeutige Zeilen wieder zurückkommt, aber ich habe festgestellt, dass für doppelte Zeilen beide 0 und 1 Satz in der Flag-Spalte hat, wird es 0 zurück?
Jede Hilfe willkommen
Lösung
Wie Sie 1 wollen, wenn es eine 1, und 0, wenn nicht, eine MAX (Flag) sollte ausreichen.
SELECT name, MAX(flag) from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id
GROUP BY name