как объединить несколько строк истина / ложь в MYSQL - PullRequest
3 голосов
/ 19 ноября 2010

У меня есть запрос с объединением таблицы, содержащей различные столбцы true / false. Я могу принудительно использовать DISTINCT & GROUP BY, чтобы гарантировать, что будет возвращена только одна уникальная строка, однако строки true / false не ведут себя предсказуемо, пример:

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

Это дает мне строки, содержащие список имен loc. Однако иногда столбец флага возвращает несколько строк, и я хотел бы объединить эти строки так, чтобы, если их было больше одной, и они содержали как 0, так и 1, запрос вернул бы только одну строку с флагом, установленным в 1. Если несколько строки содержат 0, он вернет 0 для этой строки ... Я попытался использовать имя GROUP BY, которое возвращает уникальные строки назад, однако я заметил, что для дублирующихся строк, имеющих как 0, так и 1 в столбце флага, он вернет 0?

Любая помощь приветствуется

1 Ответ

5 голосов
/ 19 ноября 2010

Как вам нужно 1, когда есть 1, и 0, если нет, МАКС (флаг) должно быть достаточно.

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