2017-02-06 2 views
0

결과를 열 A, B, C, A, B, C로 반환하는 두 개의 SELECT 문의 조인으로 구성된 쿼리가 있습니다. 여기서 A, B, C는 같은 열의 이름이지만 두 개의 서로 다른 쿼리에서 결과 집합과 같이 값이 다릅니다. 이제 두 테이블에 대해 한 행에 데이터를 표시하는 대신 A, B, C에 대해 두 개의 행이 필요합니다.MySQL이 열을 행으로 변환합니다.

현재 : - - :

  A B C A B C 
Values X1 X2 x3 Y1 Y2 Y3 

필수 : ​​-

     A B C 
Value from table 1 X1 X2 x3 
Value from Table 2 Y1 Y2 Y3 

지금 내 상태가 내가 다른 결과는 다음 한 행 표 2에서, 다시 표에서 하나 개의 행을, 즉하고 싶어한다 이런 table1과 table2의 행 등 ......

다음은 몇 가지 샘플 코드입니다.

Select * from 
     (Select x,y,z from table1) A 
    join (Select x,y,z from table1) B on A.x = B.x and A.y = B.z and A.z = B.y 
+0

귀하의 질의는 –

+2

입니다. – GurV

+0

@denny 대신 UNION ALL을 사용하고 싶습니다. 가능한 경우, 샘플 코드를 확인하십시오. 선택 * 도끼 = Bx로에 ( 선택 X, Y, 표 에서 Z ) B에 가입 불안이 Bz의 및 아리조나 = (표 에서 선택 X, Y, Z ) 발 = 바이 코드는 쿼리 A에서 x, y, z 열을 반환하고 쿼리 B에서 x, y, z 열을 반환합니다. –

답변

0

당신은 UNION ALL 필요에도 불구하고 반대로 직관.

아마 SELECT *을 사용하기 때문에 열의 혼동 된 이름에서 문제의 일부가 파생되었을 것입니다. 프로 팁 : SELECT *을 피하십시오.

의견에 입력 한 샘플이 있으면 원하는 것을 얻을 수 있습니다.

Select A.x, A.y, A.z 
    from (Select x,y,z from table1) A 
    join (Select x,y,z from table1) B on A.x = B.x and A.y = B.z and A.z = B.y 
UNION ALL 
Select B.x, B.y, B.z 
    from (Select x,y,z from table1) A 
    join (Select x,y,z from table1) B on A.x = B.x and A.y = B.z and A.z = B.y 

당신은 이런 식으로 작업을 수행합니다

SELECT a1 a, b1 b, c1 c FROM t 
    UNION ALL 
SELECT a2 a, b2 b, c2 c FROM t 

t는 복잡한 구조화 된 쿼리로 정의된다. 당신은 그 질문을 두 번 반복 할 것이므로 당신이 원하는 결과를 얻으려면 당신의 삶이 좀 복잡해질 것입니다. 왜? MySQL에는 공통 테이블식이 없습니다.

일부 입력을 절약하기 위해 t을보기로 정의 할 수 있습니다. 또는 특히 t을 생성하는 쿼리에 많은 시간이 소요되는 임시 테이블을 사용할 수 있습니다.

+0

질문에 수정 해 주셔서 감사합니다.이제 내가 의심하는 것은 Union All을 사용하면 대체 주문으로 최종 결과를 얻을 수있을 것인가 ?? 내가 원하는 나의 초기 질문에서 언급 한 것처럼 A.x, A.y, B.y A.z B.x, B.z A.x, A.y, A.z B.x, B.y, B.z 예 경우, 어떻게? –

+0

SQL에서 기본 순서 *와 같은 것이 없습니다. 질의에'ORDER BY' 절이 포함되어 있지 않으면 결과 집합의 순서는 공식적으로 예측할 수 없습니다 * 컴퓨터 과학 용어는 * ORDER BY 절없이 주문할 경우 유감입니다 * 원래 결과 세트가 어떻게 주문되었는지 설명하십시오. –

+0

단서를 보내 주셔서 감사합니다. A & B에 값을 저장하기 위해 Temp 테이블을 생성 한 다음 UNION ALL을 사용하여 순위 기능을 사용하여 대체 레코드를 추출했습니다. –