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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top