Различные столбцы условия where в зависимости от группы по количеству объединенной таблицы - PullRequest
0 голосов
/ 08 сентября 2011

Учитывая следующие 2 таблицы

table_a
id    name      num_one      num_two
------------------------------------
1     Foo       5            10
2     Bar       4            -1


table_b
name      table_a_id
--------------------
Fooa      1
Foob      1

Предположим, я хочу использовать ether num_one или num_two в предложении where в зависимости от того, присоединилась ли другая таблица к строкам или нет.Я могу придумать вот что:

SELECT a.* FROM table_a a
JOIN table_b b on b.table_a_id = a.id
WHERE if(count(b.*) > 0, a.num_one, a.num_two) > 0
group by a.id

В идеале было бы проверено, если 5> 0 в первой строке и -1> 0 во 2-й, потому что 2-я строка не объединяет строки таблицы B.

Но это ошибки с неправильным использованием group by.Я знаю о «наличии», но не знаю, как я мог бы использовать его в этой ситуации.

Есть идеи?Спасибо !!

1 Ответ

1 голос
/ 08 сентября 2011

Это можно сделать с помощью оператора IF, оператора OR или подзапроса.Ничто из этого не будет очень эффективным для большой таблицы.

Единственным реальным изменением вашего исходного утверждения было использование NULL вместо count (*).

SELECT DISTINCT a.* 
FROM table_a a
LEFT JOIN table_b b on b.table_a_id = a.id
WHERE (b.table_a_id is null AND a.num_one > 0) 
   OR (b.table_a_id is NOT NULL AND a.num_two > 0)
...