2013-04-09 8 views
3

한 번의 작업에 대해 수백 개의 SELECT 쿼리를 실행하는 대신 하나의 큰 쿼리를 실행하기 만하면되는데, 이는 내 서버의 부하를 줄이기 위해서입니다.MySQL Multiple Select, Multiple Where 절

SELECT (
(SELECT link_type_id FROM connections WHERE (node_to_id = '0' AND node_from_id = '1') OR (node_from_id = '1' AND node_to_id = '0')), 
(SELECT link_type_id FROM connections WHERE (node_to_id = '0' AND node_from_id = '2') OR (node_from_id = '2' AND node_to_id = '0')) 
) 

이 쿼리에는 더 많은 SELECTS가 있지만 두 개는 작동하지 않습니다. 이 코드를 실행하면 오류가 발생합니다.

Operand should contain 1 column(s). 

제안 사항? 감사!

+0

은, 정말하지만 훨씬 더 효율적으로하지 않습니다 필요가있다. – doublesharp

+0

선택 기준은 무엇입니까? '(node_to_id ='0 'AND node_from_id ='1 ') 또는 (node_from_id ='1 'AND node_to_id ='0 ') 두 옵션이 동일하지 않습니다. –

+0

@doublesharp 데이터베이스 쿼리 시간을 줄이려고합니다. – user1114864

답변

7

당신은 할 수 아래 시도 할 수 있지만 UNION 당신은`UNION SELECT`를 사용하고 외부`SELECT`을 잃을 필요

SELECT link_type_id FROM connections 
WHERE (node_to_id = '0' AND node_from_id = '1') 
OR (node_from_id = '1' AND node_to_id = '0') 
UNION 
SELECT link_type_id FROM connections 
WHERE (node_to_id = '0' AND node_from_id = '2') 
OR (node_from_id = '2' AND node_to_id = '0') 
+0

시도해 보셨습니까? – shola

3

이것은 괄호 밖의 열로 인해 발생합니다. 심지어 무언가로 간단 :

SELECT ((SELECT 1), (SELECT 1)) 

이 오류를 얻을 것이다 - 문제가 MySQL은 단지 열 ... 음 ... 당 하나 개의 열을 표시 할 수 있으며, 전체 ()는 하나의 열을 감싸고 있다는 것입니다. 바깥 쪽 괄호를 제거하면 각각 SELECT이 별도의 열에 표시됩니다.