2012-11-08 2 views
9

제발, 나 한테 로코 못하게 해줘. 나는이 겉보기에 쉬운 일에 대한 해답을 찾는 데 몇 시간을 보냈다.문자열을 열 이름으로 동적 변환. MySQL

그래서 우리는 두 개의 테이블이 있습니다

select (select transaction_type from orders where id=1) from items; 

SO, 문제가 주문 곳에서 선택 TRANSACTION_TYPE에 의해 반환하는 문자열입니다 항목 및 주문 기본적으로

items 
-------------- 
id (int) | type_1 (int) | type_2 (int)| 

orders 
-------------- 
id (int) | transaction_type enum ('type_1', 'type_2') 

을, 나는 다음을 수행 할 id = 1, 열 이름으로 변환 할 수 없습니다. 아이디어? 형제들 감사합니다.

+1

해당 쿼리를 실행할 때 발생하는 오류는 무엇입니까? 나는 정확한 응답을 얻는 것처럼 보입니다. 그러나 질문을 오해 할 수도 있습니다. – RocketDonkey

+0

@RocketDonkey 그것은 'types_1'문자열의 숫자를 반환합니다 (항목의 행 수에 따라) –

+0

Gotcha, 내 잘못 - 사용 가능한 무언가를 올렸습니다. (만일 내가 다시 오해하면 미안). – RocketDonkey

답변

0

문제는 당신이 PIVOT에 열의 값이

ID = 1, 열 이름으로 변환 할 수 없습니다 주문에서 선택 TRANSACTION_TYPE에 의해 반환 된 해당 문자열입니다 orders 테이블의 transaction_type 같은 그래서 :

SELECT 
     id, 
     MAX(CASE WHEN transaction_type = 'type_1' THEN 1 END) Type1, 
     MAX(CASE WHEN transaction_tyep = 'type_2' THEN 2 END) type2 
    FROM orders 
    GROUP BY id 

는 그런 다음과 같이 두 개의 테이블을 JOIN 수 있습니다

SELECT i.id - what do you want to select 
FROM items i 
INNER JOIN 
(
    SELECT 
     id, 
     MAX(CASE WHEN transaction_type = 'type_1' THEN 1 END) Type1, 
     MAX(CASE WHEN transaction_tyep = 'type_2' THEN 2 END) type2 
    FROM orders 
    GROUP BY id 
) o ON i.type_1 = o.type1 AND i.type_2 = o.type2 -- you can add more conditions 
6

this question에 대한 답변을보고 싶을 수도 있습니다. 이는 달성하려는 것으로 생각됩니다. 즉, eval() - esque 기능을 시뮬레이트하기 위해 준비된 문을 사용하는 것이 좋습니다. 귀하의 경우,이 작업을 할 수있다 (당신은 SQLFiddle here을 볼 수

SELECT transaction_type FROM orders WHERE id=1 into @colname; 
SET @table = 'items'; 
SET @query = CONCAT('SELECT ',@colname,' FROM ', @table); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 

나는 직장에서 기본적인 역학에 대한 전문가의 어떤 종류 주장하지 않지만 코멘트 당이 목표를 달성 할 것 다시 한 번 다른 답변에서 채택되었으므로 작동한다면 +1을 수행하십시오.

관련 문제