Этот запрос удовлетворяет спецификации.(Спецификация может отличаться от спецификации, необходимой для варианта использования, указанного в вопросе.)
SELECT t.notid
, t.status
FROM mytable t
LEFT
JOIN ( SELECT b.notid
, b.status
FROM mytable b
WHERE b.status = 'active'
GROUP
BY b.notid
) n
ON n.notid = t.notid
WHERE ( n.notid IS NULL OR t.status = 'active' )
ORDER
BY t.notid
, t.status
Дано:
INSERT INTO mytable (notid, status) VALUES
('1','active')
,('1','inactive')
,('2','active')
,('3','inactive')
,('4','fee')
,('4','fi')
,('4','fo')
,('4','fum')
,('5','active')
,('5','active')
,('5','inactive')
;
Запрос возвращает:
notid status
----- ------
1 active
2 active
3 inactive
4 fee
4 fi
4 fo
4 fum
5 active
5 active
В этом запросе предполагается, что notid
не равен NULL.Это вернет все строки в таблице, включая дубликаты, за исключением строк со статусом, отличным от «активный», если для данного notid
.
существует строка со статусом «активный».