2016-09-02 4 views
-1

Я с помощью оператора выбора, как этотMYSQL: проверить, если одна строка результата имеет определенное значение

SELECT color, form FROM userTable WHERE type = 42 

и получить в результате

color | form | 
-------------------- 
red | circle | 
blue | rectangle | 
blue | circle | 

Однако я хотел бы получите только одну строку, которая равна 1 в столбце цвет, если выйдет строка моего результата с синим цветом, в противном случае 0 и которая равна 1 в столбце f orm, если существует строка моего результата с формой линии. Таким образом, из приведенного выше примера результат должен выглядеть

color | form | 
------------------- 
    1 |  0 | 

Можно ли добиться этого с помощью команды MySQL?

Вот что я пробовал:

SELECT IF(color='blue', 1, 0) as color, IF(form='line', 1, 0) as form 
FROM userTable WHERE type = 27 GROUP BY type 

, но я не думаю, что это работает, так как некоторые строки выполнить IF-условия и другие не делают. Мне понадобится инструкция, которая похожа на IF THERE EXITS A ROW WITH COLOR = 'blue' или что-то в этом роде.

ответ

3

Вы должны сделать это так:

SELECT IF(COUNT(CASE WHEN color = 'blue' THEN 1 END) > 0, 1, 0) AS color, 
     IF(COUNT(CASE WHEN color = 'line' THEN 1 END) > 0, 1, 0) AS form 
FROM mytable 
WHERE type = 42 
GROUP BY type 

Demo here

+0

Отлично! Спасибо :)! – Adam

1

Вы можете проверить 'если существует ряд' ситуацию с функцией COUNT().

SELECT COUNT(color) FROM userTable WHERE color="blue", например, возвращается с одним столбцом и рядом, что делает этот счет.

Вы можете расширить это с помощью условий и количества столбцов, чтобы они соответствовали вашей цели.