'WHERE' 절 sql에서 다른 값으로 폴백하는 방법은 무엇입니까?
열 필드1='value1'에 대한 값이 없으면 'default'에 대한 레코드를 가져와야 하는 경우가 있습니다.
위 시나리오에서는 두 가지 쿼리를 사용했습니다.
Select * from table_name where field1="value1"
위 쿼리가 레코드를 반환하지 않으면 다음 쿼리를 실행합니다.
Select * from table_name where field1="default"
이제 저는 위에 언급된 것을 하나의 질문에서 하고 싶습니다.누가 저를 도와줄 수 있을까요?나는 답이 어딘가에 있다고 믿습니다.CASE WHEN
절
또한 위의 쿼리는 mysql 뿐만 아니라 oracle, postgres에 대해서도 작동해야 합니다.
핵심 ANSI SQL 응답(모든 플랫폼에서 실행 예정):
select * from table_name
where field1 = 'value1'
or (field1 = 'default'
and NOT EXISTS (select 1 from table_name where field1 = 'value1'))
사용 사례 및 아래와 같이 존재합니다.
Select * from table_name where field1=
case when exists(select 1 from table_name where field1='value1')
then 'value1' else 'default 'end
다음을 사용한 최적의 솔루션coalesce()
:
Select * from table_name where field1 = coalesce (
(select field1 from table_name where field1='value1' limit 1)
, 'default'
);
주의:limit 1
하위 쿼리:이 경우 하위 선택이 두 개 이상의 행을 반환하지 않도록 해야 합니다.하지만 심지어 그것을 사용하는 것도.case when exists (...)
접근하지 않으면 데이터베이스 엔진이 하위 쿼리와 일치하는 모든 행을 검색해야 하므로 이를 추가하는 것이 좋습니다.
물론, 대부분의 최신 데이터베이스는 조용히 최적화할 수 있을 정도로 충분히 똑똑합니다.하지만 몇몇 오래된 것들은 그럴 수 없었습니다.그리고 어쨌든, 그것은 그들이 할 수 없는 경우가 될 수 있습니다.
그것은, 예를 들어, Postgre에서.SQL, 하위 쿼리에서 안정적이지 않은(또는 적절하게 선언되지 않은) 함수를 사용하는 경우, 설계자는 해당 함수에 부작용이 있을 경우 일관된 결과를 생성하기 위해 전체 검색을 수행해야 합니다.
Mysql의 경우:
SET @a = Select Count(*) from table_name where field1="value1"
IF @a > 0 Then
Select
*
from
table_name
where
field1="value1"
ELSE
Select
*
from
table_name
where
field1="default"
END IF
좋아요, 제가 해봤는데 효과가 있는 것 같아요.
SELECT * FROM table_name WHERE
CASE
WHEN EXISTS(SELECT * FROM table_name WHERE field1='value1') THEN field1= 'value1'
ELSE field1='default'
END
당신도 해볼 수 있어요...
select * table_name where field1="default"
and not exists (select * from table_name where field1="value1")
union all
select * from table_name where field1="value1"
사용할 수 있습니다.case
와의 진술.count
확인.
select *
from table_name
where coulmn_1 = (case
when (select count(1) from dc_date_card where coulmn_1 = value_1) > 0 then
value_1
else
Default
end)
언급URL : https://stackoverflow.com/questions/38715625/how-to-fallback-to-a-different-value-in-where-clause-sql
'programing' 카테고리의 다른 글
기존 테이블에 인덱스 생성 Oracle (0) | 2023.07.22 |
---|---|
numpy.exp()는 정확히 무엇을 합니까? (0) | 2023.07.22 |
임시 정의 정보 (0) | 2023.07.22 |
그린렛 대.스레드 (0) | 2023.07.17 |
ASP.NET 그리드 보기에서 부울을 예/아니오로 변환할 수 있습니까? (0) | 2023.07.17 |