2012-05-21 4 views
1

두 개의 테이블이 있습니다. 첫 번째 유형은 유형을 보유하고 두 번째 유형은이 유형의 값을 보유합니다. 내 예에서 는 'FIRST_NAME'로 더 많은 값 '존은'내가 얻을 수있는 경우 : single-row subquery returns more than one row``단일 행 부질의가 두 개 이상의 행을 반환합니다 .` 오류 불투명도

SELECT DISTINCT id FROM name WHERE id=(
SELECT id FROM name WHERE text1='first_name' INTERSECT 
SELECT name_id FROM value WHERE text2='john'); 

내가 SQL에 아주 좋은 아니에요. 나는 LEFT JOIN 또는 그와 비슷한 것을 사용해야 만하지만 어떻게해야하는지 명확하지 않습니다.

+0

검색어가 잘못되었습니다. 그러나 우리가 좋은 것을 쓸 수 있도록 당신이 원하는 것을 설명하십시오. –

답변

1

IN ID (= 대신 ID의 IN 사용은), 당신은 또한 쿼리의 다소 간단한 버전을 사용할 수 있습니다 에 :

SELECT DISTINCT id FROM name WHERE text1='first_name' 
and id in (
SELECT name_id FROM value WHERE text2='john') 
0
SELECT id FROM name WHERE text1='first_name' INTERSECT 
SELECT name_id FROM value WHERE text2='john'); 

이 쿼리는 여기

SELECT DISTINCT id FROM name WHERE id IN (
SELECT id FROM name WHERE text1='first_name' INTERSECT 
SELECT name_id FROM value WHERE text2='john'); 

같은 IN 절을 사용한다 또는 당신은 단지 행을 기대한다면, 당신은 당신의 DB의 논리와 행동을 검토해야 하나 개 이상의 행을 반환합니다.

+0

그렇다면 쿼리에 IN 절을 포함해야합니다 .-) –

0

당신은 변경 될 수 있습니다 WHERE ID = 외에도 간단한 수정에서

+0

SELECT TOP 1을 넣을 수도 있지만 그렇게하고 싶지는 확실하지 않습니다. – LordWabbit

2

부질 [수]가 여러 개의 값을 리턴하기 때문에,보다 나은 IN 사용이다 =

SELECT DISTINCT id 
FROM name 
WHERE id IN (
     SELECT id FROM name WHERE text1='first_name' 
     INTERSECT 
     SELECT name_id FROM value WHERE text2='john'); 
,745 단일 값을 할당하는 데 사용되는

SELECT * 
FROM tableName 
WHERE a = 4 or a = 5 or a = 6 

SELECT * 
FROM tableName 
WHERE a in (4,5,6) 

= (등호)과 같이 쓸 수있다 :

IN 예컨대, OR 상당하다.

관련 문제