Question

J'ai une requête avec une jointure sur une table contenant différentes colonnes vrai / faux. Je peux chargées de faire respecter DISTINCT & GROUP pour assurer que seule ligne unique est renvoyée, mais les vrais / faux lignes ne se comportent pas de façon prévisible, par exemple:

**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

Cela me donne des lignes contenant une liste de noms de loc. Cependant, les rendements de la colonne de drapeau plusieurs lignes parfois, ce que je voudrais faire est de combiner ces lignes de sorte que s'il y a plus d'un, et ils contiennent à la fois 0 et 1, la requête retournera qu'une seule ligne avec jeu de drapeau à 1. Si plusieurs lignes contiennent 0, il retournera 0 pour cette ligne ... J'ai essayé d'utiliser GROUP BY nom, qui renvoie des lignes uniques de retour, mais je l'ai remarqué que pour les lignes en double ayant à la fois 0 et 1 jeu dans la colonne de drapeau, il retournera 0?

Toute aide appréciée

Était-ce utile?

La solution

Comme vous voulez 1 quand il y a un 1 et 0 sinon, un MAX (drapeau) devrait suffire.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top