2010-06-28 2 views
1

MYSQL 데이터베이스에서 단일 쿼리를 실행하고 싶습니다. 내가 찾고있는 테이블은 3 개의 값 (1,2,3) 중 하나가 될 file_type 필드를 가지고있다. 이 값들이 무엇인지에 따라 데이터베이스와 다른 정보를 찾고 싶습니다.SELECT 절 : 선택적 열?

예를 들어 'file_type'필드가 1 또는 2 인 경우 필드 a, b, c, d를 선택하려고합니다. 그러나 file_type = 3 인 경우 a, b, c 필드를 선택합니다. , d, e, f

단일 SELECT 문에서이 작업을 수행 할 수 있습니까? 이 같은 - 틱

my_simple_query = SELECT file_type,a,b,c,d FROM table1 
my_new_query = SELECT file_type,a,b,c,d (AND e,f IF file_type = 3) FROM table1 

덕분에 모든

--------------------------------- - 추가 -----------------------------------

그리고 만약 내가 e, f가 다른 테이블에 저장 되었습니까?

my_multitable_query = SELECT file_type,id,a,b,c,d (AND e,f FROM table2 WHERE id=id) FROM table1 

내 표류를 얻으시겠습니까?

답변

3

비 관계형 데이터가 필요하면 CouchDB 또는 MongoDB과 같은 비 관계형 데이터베이스를 사용하는 것이 더 행복 할 수 있습니다.

SQL에서는 쿼리를 작성할 때 모든 열을 선언해야합니다. 이러한 모든 열은 결과 집합의 모든 행에 있어야합니다. 열 집합은 각 행의 내용에 따라 다를 수 없습니다. 이것은 실제로 관계형 데이터베이스라는 정의입니다 (각 열은 모든 행에 동일한 유형을 갖습니다). 귀하의 추가 질문에 대해서는


이 어딘가에 점점 될 수있다

SELECT t1.file_type, t1.a, t1.b, t1.c, t1.d, t2.e, t2.f 
FROM table1 t1 
LEFT OUTER JOIN table2 ON t1.id=t2.id; 

당신거야 여전히이 NULL 경우에도, 결과 집합의 모든 행에 열 E와 F를 얻을 수 있기 때문에이 table1의 주어진 행에 대해 table2에서 일치하지 않습니다.

이렇게하면 Class Table Inheritance이라는 패턴이 나옵니다.

+0

감사합니다. 그렇다면 오래 전부터 선택 진술을하고 싶습니다. 저는 좀 더 효율적으로 만들고 특정 필드 만 반환하려고했습니다. 응답을위한 많은 감사 – undefined

5

아니요, SQL SELECT 문은 선택적 열을 지원하지 않습니다.

하지만 당신은 기준에 따라에만 반환 값에 대한 논리를 지정할 수 있습니다, 그렇지 않으면 null이 될 것입니다 :

SELECT a,b,c,d, 
     CASE WHEN file_type = 3 THEN t2.e ELSE NULL END AS e, 
     CASE WHEN file_type = 3 THEN t2.f ELSE NULL END AS f 
    FROM TABLE_1 t1 
    JOIN TABLE_2 t2 ON t2.id = t1.id 
0

는 MySQL의에 익숙하지,하지만 왜 UNION를 사용하지?

> SELECT file_type,a,b,c,d FROM table1 WHERE file_type in (1,2) 
> UNION 
> SELECT file_type,a,b,c,d,e,f FROM table1 WHERE file_type = 3 
+0

UNION은 동일한 수의 열이 양쪽 구문에서 사용되는 경우에만 작동 할 수 있습니다. 이 경우에는 쿼리가 상호 배타적이며 UNION ALL이 훨씬 빠르기 때문에 UNION을 모두 사용합니다. – HLGEM

+0

맞아, 잊어 버렸고 내 진술을 테스트하지 않았다. 첫 번째'SELECT'에 "null, null"을 추가하면, 보통 그렇게합니다 ... re :'UNION ALL' ... 정말요? 나는 그것을 보는데 결코 신경 쓰지 않는다. 나는 그것이 대체로 일종의 설탕 설탕이라고 생각했다. – pascal