2010-07-13 5 views
2

어떻게 mysql을 실행할 수 있습니까? 또는 별도의 쿼리를 동시에 쿼리 할 수 ​​있습니다. 예컨대 :mysql 및 or query를 함께 사용합니다.

그리고 쿼리

select * form tablename where name='A' and password="A" and id='A'; 

또는 쿼리 :

select * form tablename where name='A' or password="A" or id='A'; 

- 이러한 내가 함께 이러한 쿼리를 만들 수있는 구문은 무엇인가, 2 개의 다른 쿼리입니다 ?? 다른의 부분 집합 하나 때문에

+0

쿼리가 동일합니다. * 혼란스러운 * – thomasfedb

답변

3

글쎄, 당신이 할 수있는 단지 노동 조합을하지만, 그것은 꼭 필요한 것은 : 당신이 바로 두 번째를 실행하는 것처럼

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에 더 나은 성능을 제공합니다. 물론, 모든 최적화와 마찬가지로, 측정, 추측하지 마십시오.

9

괄호를 사용하여 조건을 그룹화 하시겠습니까?

SELECT * FROM table WHERE (X and Y or Z) AND (P and Q or F)

0

조건

select * form tablename 
     where name='A' OR password="A" OR id='A' OR 
        (name='A' AND password="A" AND id='A') 

당신이 다음 쿼리

select * form tablename 
     where name='A' OR password="A" OR id='A' 
다음 사용하여 같은 O/P를 얻을 것이다 여기 A으로 동일한 문자열을 확인하려는 경우 이러한 유형에 대한 사용 ()
+0

마지막 부분 인 "또는 (...)"은 불필요합니다. – paxdiablo

+0

@ paxdiablo : - 내 대답을 업데이트하지만 그는 하나의 쿼리에서'AND'와'OR'을 사용하는 방법을 알고 싶기 때문에 위의 것을 삭제하지 않을 것입니다. – Salil

+0

아니, 아마도 좋은 일일 것입니다. 원래 'A'는 두 조건에서 다른 자리 표시 자일 수도 있고, 동일하게 보장되는 문자 적 ​​가치가 아닐 수도 있습니다. – paxdiablo

0

조건을 결합하여 WHERE

괄호전체 AND 표현 나머지는 당신이 결과로 기대하는 것을 분명히하지 않는 OR

1

을 macthes 동안 모두 포함하는 조건에 해당하는 경우에만 "확인합니다"되도록하지만 내 생각 엔 당신입니다 노동 조합을 원하는 : 결과의 첫 번째 열 query 때문에 노동 조합 (X와 Y) 및 (X 또는 Y)의 두 쿼리의 결과를 분리하기 위해 필요하다고

SELECT 1 `query`, `name`, `password`, `id` 
FROM `tablename` WHERE `name`='A' and `password`='A' and `id`='A' 
UNION 
SELECT 2 `query`, `name`, `password`, `id` 
FROM `tablename` WHERE `name`='A' or `password`='A' or `id`='A' 

참고 항상 (X 또는 Y)입니다.

관련 문제