2014-03-26 6 views
0
SELECT 
    c.cy_id AS cy_id, 
    (SELECT 
    c.to_id 
    FROM c 
    WHERE (c.to_id = se.ar))AS tsn, 
    (SELECT 
    se.x 
    FROM se 
    WHERE (c.to_id = se.ar)) AS X, 
    (SELECT 
    se.y 
    FROM se 
    WHERE (c.to_id = se.ar)) AS y 
FROM (c 
    JOIN se) 
WHERE (c.to_id = se.ar) 

위의 쿼리에서 mysql을 실행하면 오류 하위 쿼리에서 두 개 이상의 행을 반환합니다. 하지만 아래의 쿼리를 수행하면 결과가 반환됩니다.mysql의 하위 쿼리 오류

SELECT 
    c.cy_id AS cy_id, 
    (SELECT DISTINCT 
    c.to_id 
    FROM c 
    WHERE (c.to_id = se.ar))AS tsn, 
    (SELECT 
    se.x 
    FROM se 
    WHERE (c.to_id = se.ar)) AS X, 
    (SELECT 
    se.y 
    FROM se 
    WHERE (c.to_id = se.ar)) AS y 
FROM (c 
    JOIN se) 
WHERE (c.to_id = se.ar). 

이유가 필요합니다.

+0

당신이 DISTINCT 사용하는 경우, 쿼리가 다른 행을 반환이 시도하고 당신에게 당신이 원하는 결과를 얻을 수 있는지 확인 두 가지 (또는 그 이상)의 결과가 모두 동등하기 때문에 하나의 결과. 첫 번째 하위 쿼리를 확인하고 반환되는 행 수를 확인하십시오. – Sirac

+0

@Sirac : 내 첫 번째 쿼리 does not 반환 모든 row.it subquery 하나 이상의 행을 반환하지만 내가 DISTINCT 사용하여 두 번째 쿼리를 실행할 때 그것은 나에게 78 행을 제공하는 오류가 주어진다. 차이점은 무엇입니까? – user3454116

+0

당신이 이것을 실행해야한다는 것을 의미합니다 :'SELECT c.to_id FROM c WHERE (c.to_id = se.ar)'그리고 반환되는 행의 수를 봅니다. 둘 이상의 행이있는 경우 DISTINCT를 어떻게 사용해야합니다. DISTINCT를 사용하지 않고 문제를 해결하려면 c.to_id 열을 primary 또는 unique 열로 선언해야합니다. (따라서 PRIMARY 및 UNIQUE 키워드를 확인하십시오) – Sirac

답변

0

c 테이블에 여러 행이 있지만 모두 동일한 to_id 값을 가지고 있습니다. 하위 쿼리가 여러 레코드를 반환하면 오류가 발생합니다.

또한 쿼리에 하위 쿼리가 필요하지 않습니다. 어쩌면 당신은 첫 번째 쿼리는 같은과 DISTINCT 쿼리는 반환 두 개의 행을 반환,

SELECT 
    c.cy_id, 
    c.to_id AS tsn, 
    se.x AS X, 
    se.y AS y 
FROM c 
    JOIN se 
     ON c.to_id = se.ar 
+0

잘 작동하고 필요한 결과를 얻습니다. – user3454116

+0

나는 원하는 결과를주는 두 개의 질의를 가지고있다. 그것들을 하나로 결합 할 수있는 기회가있다. 쿼리는 다음과 같다 : 첫 번째 질의 이하이다 c.cy_id, TSN c.to_id AS, AS se.x TX, TY C FROM AS se.y을 선택 c.to_id에서 S 가입 = se.ar 연합 c.cy_id, TSN AS c.to_id, TX로서 swt.x, C에서 TY 같은 swt.y c.to_id = swt.ar 번째에 SWT 가입을 선택 검색어는 입니다. SELECT c.cy_id, c.fr_id AS fsn, se.x A FX S, SE 가 가입 ℃ 내지 se.y AS 기 ON c.fr_id = se.ar 내가 모두 조인 쿼리의 모든 열 이름을 가진 결합 결과를 얻을 수있다. – user3454116