Добавить в результаты MySQL, если 1 столбец в НЕ В результатах - PullRequest
1 голос
/ 18 июля 2011

Я хочу создать MyQSL-запрос, подобный

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' IF 'BOB' NOT IN (SELECT person FROM mytable);

Если «BOB» не возвращается в результатах, я хочу добавить его к результатам и указать, что он в Чикаго.Если BOB вернется в результатах, независимо от того, где он находится, я не хочу добавлять его в Чикаго.

Я могу выполнить эту работу, если точно сопоставлю столбцы, но я закончудо получения нескольких результатов для BOB, если он указан как что-то отличное от Чикаго.

SELECT person, city FROM mytable
UNION
SELECT 'BOB', 'Chicago'

, но я не хочу совпадать по местоположению.Просто имя человека.

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Это должно работать:

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' from dual
 where NOT exists (SELECT person FROM mytable WHERE person = 'BOB');

Более оптимизированная версия, которая возвращает те же результаты

SELECT person, city FROM mytable WHERE person <> 'BOB'
UNION 
SELECT 'BOB', COALESCE((select city from mytable WHERE person = 'BOB'), 'Chicago') from dual
0 голосов
/ 18 июля 2011

Вот переписать ваш оригинальный запрос, который должен работать:

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' from dual where not exists (
  SELECT NULL FROM mytable where person = 'BOB'
);
...