dennikolas
@dennikolas
PHP макака

SQL, создание поля в ответе, если есть совпадение по одной из двух таблиц, как?

Есть три таблицы.
Одна с текущим списком машин, вторая с чёрным списком и третья с белым.
В каждой из них указан номер машины(приведён к единому формату, разумеется).
Как составить запрос к бд, что бы помимо всех полей из текущего журнала, добавлялось поле `list`, в которое, при условии совпадения номеров(скажем, поле `numbers`) из списков с номерами из журнала, добавлялось название журнала?

journal - текущий
id - numbers
0 - А 111 АА
1 - В 222 ВВ
2 - С 333 СС

blacklist - чёрный список
id - numbers
0 - A 111 AA
1 - E 444 EE

whitelist - белый
id - numbers
0 - C 333 CC
1 - H 555 HH

Желаемый ответ
id - numbers - list
0 - А 111 АА - blacklist
1 - В 222 ВВ - null
2 - С 333 СС - whitelist


Возможно ли вообще это сделать одним запросом? Очень не хочется перебирать по массивам каждого списка.
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
streetflush
@streetflush
select t1.id,t1.number, case when t2.id is not null then 'blacklist' when t3.id is not null then 'whitelist' else '-' end as list
from journal t1
left join blacklist t2 on t1.number = t2.number
left join whitelist t3  on t1.number = t3.number


Не обрабатывается ситуация когда есть в whitelist и blacklist одновременно! Если таковое возможно, надо переписать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
Обязательно разве выводить под это дело отдельные таблицы?
Можно же создать таблицу
id - numbers - isInBlackList - isInWhiteList
0 - А 111 АА - true - false
1 - В 222 ВВ - false - false
2 - С 333 СС - false - true

И работать с этим. Если машина в списке - true. Не в списке - false
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы