글쎄, 당신이 할 수있는 단지 노동 조합을하지만, 그것은 꼭 필요한 것은 : 당신이 바로 두 번째를 실행하는 것처럼
는
select * from tablename
where name = 'A' and password = 'A' and id = 'A'
union select * from tablename
where name = 'A' or password = 'A' or id = 'A'
그건 당신에게 정확히 같은 결과를 얻을 수 자체 쿼리. 첫 번째 쿼리의 모든 단일 행에 name
이 'A'
과 동일하므로 두 번째 쿼리의 where
절의 첫 번째 부분과 일치한다는 것을 알게되면 의미가 있습니다.
두 쿼리에서 반환되는 행이 중복되는 경우 union
대신 union all
을 사용하면됩니다.
'A'
을 단지 자리 표시 자로 사용하고 그 값이 두 쿼리에서 다른 경우 두 가지 접근 방법이 있습니다. 같은 구문을 사용
... where (name = 'A' and password = 'B' and id = 'C')
or name = 'D' or password = 'E' or id = 'F'
또는 내가 위에서 준 union
솔루션을 사용, 뭔가 같은 : 당신이을 알고 때
select * from tablename
where name = 'A' and password = 'B' and id = 'C'
union select * from tablename
where name = 'D' or password = 'E' or id = 'F'
(사용 union all
이 두 쿼리 간의 중복의 가능성이없는, - 존재하지 않는 중복을 제거하는 문제를 DBMS에 저장합니다. 이러한 쿼리에서는 그렇지 않습니다.
union
수도 별도의 쿼리 엔진에 더 쉽게 (복잡한 절 단일 쿼리를 더 어려울 것이 뭔가를) 두 가지 선택을 하이브 할 수있는 DBMS에 더 나은 성능을 제공합니다. 물론, 모든 최적화와 마찬가지로, 측정, 추측하지 마십시오.
쿼리가 동일합니다. * 혼란스러운 * – thomasfedb