2012-08-23 2 views
0

CONCAT 기능에 대한 도움이 필요합니다. 두 가지 선택 쿼리가 있고 각 쿼리의 결과는 하나의 열입니다. 이 두 열을 하나로 병합해야합니다. 그게 가능하니? Beacuse, 다음과 같은 단순한 select 쿼리로 시도해도 결과를 얻을 수 없습니다.Concat 두 개의 열과 열을 SELECT 쿼리를 통해 얻습니다.

SELECT owner FROM table WHERE number="value1"; 
SELECT number FROM table WHERE owner="value2" AND number IS NOT null; 

이러한 쿼리는 작동하여 결과처럼 3 개의 행을 throw합니다. 하지만 CONCAT을 사용하여 하나의 열에 병합하려는 경우 작동하지 않습니다. 왜 그런지 알아?

SELECT CONCAT(SELECT owner FROM table WHERE number="value1", 
SELECT number FROM table WHERE owner="value2" AND number IS NOT null 
) as NEW_COLUMN FROM table; 
+0

왜 "FROM table"이 마지막에 있습니까? – Ian

답변

0
SELECT 
    CONCAT(owner, number) as NEW_COLUMN 
FROM 
    table 
WHERE 
    owner = "value2" 
    AND number = "value1" 
    AND number IS NOT NULL 
2

난 당신이 원하는 생각 :

SELECT CONCAT(owner, number) newCol1 
FROM yourTable 
WHERE number="value1" 
    OR (owner="value2" AND number IS NOT null) 
0

근본적인 이유는 DB 행의 다른 번호가있을 수 있습니다 서로 다른 두 가지에 select를 연결할 수 없다는 것입니다.

당신이해야 할 일은 JOIN의 관점에서 쿼리를 다시 형식화하는 것입니다. 예를 들어

우리가이 테이블이 있다고 가정

owner number 
John  value1 
value2 123456 

귀하의 첫 번째 쿼리 :

SELECT owner FROM table WHERE number="value1"; 

는 "존"을 반환합니다. 두 번째 것

SELECT number FROM table WHERE owner="value2" AND number IS NOT null; 

은 "123456"을 반환합니다.

두 값을 연결하면 "John 123456"이됩니다.

우선, 원하는 쿼리의 예상되는 동작입니까? 세 번째 행에 owner = Jack 및 number = value1이 있으므로 첫 번째 쿼리에서 두 행 "John"과 "Jack"을 반환합니다.

당신이 살펴볼 수있는 한 가지는 CROSS JOIN 구문입니다. 제 질의는 세 개의 행과 네 번째 행을 반환하는 경우, 상기 결합 쿼리 3 * 4 = 12 행가 반환

SELECT CONCAT (table1.owner, ', ', table2.number) AS new_column 
    FROM (SELECT owner FROM table WHERE number="value1") AS tablel1 
    CROSS JOIN 
    (SELECT number FROM table WHERE owner="value2" AND number IS NOT null) AS table2; 

참고.

관련 문제