2014-11-06 2 views
0

두 개의 쿼리를 실행하여 테이블의 같은 열에서 값 목록을 가져 오려고합니다. 나는 남성 행의 부울 값이SQL에서 여러 쿼리를 사용하여 동일한 테이블에서 같은 값을 가져옵니다.

이 인 UID를 기반으로 해당하는 경우 NAME 행의 SHORT_TEXT를 얻기 위해 노력하고

****************************************** 
Key | Short_text | UID | Boolean_value 
****************************************** 
Name | John  | 23 | null 
****************************************** 
Male | NULL  | 23 | true 
****************************************** 
Name | Ben  | 45 | null 
****************************************** 
Male | NULL  | 45 | true 

:

은 같은 테이블 모습입니다 내가 지금까지 가지고있는 것 : 오류가 발생했습니다 : 하위 쿼리가 1 개 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 식으로 사용될 때 허용되지 않습니다. . )

SELECT SHORT_TEXT_VALUE 
    FROM Table 
    WHERE ((SELECT UID 
    FROM Table 
    WHERE KEY = 'NAME') = 
(SELECT CUSTOMER_UID 
    FROM Table 
    WHERE KEY = 'Male' 
    AND BOOLEAN_VALUE = 1)) 

저는 SQL에 대해 매우 익숙해 졌으므로 내가 원하는 것을 얻기 위해 무엇을해야하는지 확신 할 수 없습니다.

도움이된다면 크게 도움이 될 것입니다.

+1

테이블을 다시 디자인하는 것이 좋습니다. 기본 키 필드가없는 것처럼 보였으 나 이와 같은 문제가 발생하고 있습니다. 귀하의 테이블에 "uid", "성별", "성별", "short_text"라는 쿼리가 있으면 쉽게 쿼리 할 수 ​​있습니다 ... – mlinth

+1

@ mlinth 자신의 테이블 디자인에 대해 생각할 수있는 유일한 장점은 각 UID 특정 키 (이름, 남성, 주소 ....)를 포함하거나 포함하지 않을 수도 있지만 키 정보가 완전하지 않기 때문에 주요 유효성 검사 문제가 발생할 수 있습니다. – TheProvost

답변

1

을 나는이 무엇을 생각 당신이 달성하려고하지만 코드를 내놓고있는 것을 확실하지 오전 당신이 원하는

SELECT SHORT_TEXT_VALUE 
    FROM Table 
    WHERE KEY='Name' 
    and UID in(SELECT UID 
    FROM Table 
    WHERE KEY = 'Male' 
    AND BOOLEAN_VALUE = 1) 

그러나 더 중요한 메모에. 테이블 디자인을 재 설계하는 것에 대해 생각해보십시오. 특정 남성용 UID가 다른 행에있는 이유는 무엇입니까? 안녕하세요 하위 쿼리와 함께 그것을 시도

+0

이 테이블은 다른 누군가가 디자인 한 것이며 끔찍하다는 데 동의합니다! –

+0

다른 키가있는 행, 'Name'키가있는 행이 필요했습니다.이 키를 쿼리에 어떻게 추가 할 수 있습니까? –

+0

내 대답이 업데이트되었습니다. 생각해보십시오. 이 테이블 디자인이 다중 키용인지 확인하십시오. 이것이 당신을 도왔 으면 좋겠다 :) – TheProvost

2

당신은 자신과 테이블에 가입 할 수 있습니다 :

SELECT 
    t1.UID, 
    t1.Short_text 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.UID=t2.UID 
WHERE 
    t1.Key='Name' AND t2.Key='Male' AND t2.Boolean_value=TRUE 

또는이 존재합니다 :

SELECT 
    t1.UID, 
    t1.Short_text 
FROM 
    tablename t1 
WHERE 
    t1.Key='Name' AND 
    EXISTS (SELECT * FROM tablename t2 
      WHERE t1.UID=t2.UID AND t2.Key='Male' AND t2.Boolean_value=1) 
+0

테이블이 1 개뿐입니다.이 쿼리는 2 개의 테이블에 조인합니까? –

+1

@LiluPatel이 쿼리는 하나의 테이블과 자체 조인하므로 다른 별칭 (t1과 t2)을 사용하고 있습니다. – fthiella

1

,이 시도 :

SELECT Short_text 
FROM table 
WHERE uid in (SELECT uid FROM table WHERE boolean_value = "true") 
AND Short_text IS NOT NULL 

이 있는지 확인 남성 행의 값이 있음 (NULL)이 아닌

Btw는 "NULL"을 문자열. 이 테이블은 데이터베이스 테이블의 정규화 형식과 일치하지 않습니다. 읽어주세요 the introduction to database normalization

관련 문제