я написал следующий скрипт:Игнорировать WHERE условие, если запись не найдена
SELECT vil.account_id ,
vil.imp_id,
vil.owner ,
vil.start_date,
CASE
WHEN ac.status = 4
THEN status_date
ELSE NULL
END AS Live_date,
cs.country_code
FROM ACCOUNT ac
INNER JOIN vu_imp_list vil
ON vil.account_id = ac.account_id
INNER JOIN entity e
ON ac.entity_id = e.entity_id
INNER JOIN country_specifics cs
ON e.country_id = cs.country_id
WHERE ac.account_id IN
('000206789', '000207464', '000207696', '000207746')
AND
(vil.start_date =
(SELECT MIN(vils.start_date)
FROM vu_imp_list vils
WHERE vil.account_id = vils.account_id)
Это вернет старую imp_id
для каждого account_id
. Однако он будет игнорировать те, которые не имеют imp_id
. Поскольку некоторые account_ids
не имеют imp_id
за столом vu_imp_list
; WHERE's second condition
будет извлекать только те записи, у которых есть корреспондент start_date
и imp_id
. Короче говоря, как игнорировать это условие в случае, если соответствующая запись не найдена в таблице vu_imp_list
. Я нашел this post для связанных с MySQL, но, кажется, что-то не так с ним, как я получаю ошибку missing SELECT keyword
SELECT vil.account_id ,
vil.imp_id,
vil.owner ,
vil.start_date,
CASE
WHEN ac.status = 4
THEN status_date
ELSE NULL
END AS Live_date,
cs.country_code
FROM ACCOUNT ac
INNER JOIN vu_imp_list vil
ON vil.account_id = ac.account_id
INNER JOIN entity e
ON ac.entity_id = e.entity_id
INNER JOIN country_specifics cs
ON e.country_id = cs.country_id
WHERE ac.account_id IN
('000206789', '000207464', '000207696', '000207746')
AND
((vil.start_date =
(SELECT MIN(vils.start_date)
FROM vu_imp_list vils
WHERE vil.account_id = vils.account_id))
OR
NOT EXISTS
(vil.start_date = (SELECT MIN(vils.start_date)
FROM obi.vu_implementation_list vils
WHERE vil.ob10_account_id = vils.ob10_account_id)
Именно это что я ищу. Я просто заменил 'AND (vil.start_date IS NULL' на' AND (vil.imp_id IS NULL), поскольку более старый путь будет включать самые старые 'start_date' ** и **' NULL', если есть – Hawk