SQL красное смещение выбрать всю таблицу или одну динамику записи c выбрать вопрос - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица, и я хочу иметь динамическую c select:

выбрать всю таблицу, если столбец условия не имеет «плохого» значения.

если есть 'bad', затем вместо этого распечатайте строки с неверным значением.

id, name, condition
1    apple     good
2    pearl     bad
3    kiwi      good
4    grapes    good 

Я думал об использовании union, но не мог придумать, как правильно выбрать.

Если таблица выглядит так, затем вывести всю таблицу

id, name, condition
1    apple     good
2    pearl     good
3    kiwi      good
4    grapes    good 

Если таблица такая, то выберите только строку 3

id, name, condition
1    apple     good
2    pearl     good
3    kiwi      bad
4    grapes    good 

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Один из вариантов: union all и not exists:

select t.* from mytable t where condition = 'bad'
union all 
select t.* from mytable t where not exists (select 1 from mytable t1 where t1.condition = 'bad')

Если вы используете SQL Server (который вы пометили вместе с amazon-redshift), вы также можете сделать это top 1 with ties:

select top (1) with ties t.*
from mytable t
order by case when condition = 'bad' then 0 else 1 end
0 голосов
/ 06 мая 2020

Вы можете использовать not exists:

select t.*
from t
where not exists (select 1 from t t2 where t2.condition = 'bad');
...