2017-06-09 166 views
1

我需要编写一个查询,应该从桌子拉其他表的基础上的数据我的专栏名称也将取决于其他表SQL查询其他表的where子句

让的基础上,选择列说我有表A和B:

// Table A 
Type_id D1 D2 D3 
1 1 2 3 
2 12 11 14 
3 23 24 15 

// Table B 
Type_id DC1 DC2 
1 D2 D3 
2 D1 D3 
3 D3 D1 

查询应该是这样的:

select if(type_id=1 then D2,D3) if(type(type_2 then D1,D3) from A where type_id in (select type_id from B) order by if(type_id=1 then D2,D3) if(type(type_2 then D1,D3)

我无法修复type_id = 1,type_id = 2在选择列名或按顺序,因为表有很多type_id,并且会增长。

所以结果应该是:

type_id,columns with respect to (DC1,DC2) 
1,2,3 
2,12,14 
3,15,23 
+0

编辑,以便该代码是可读的。您需要修复查询的语法,但是 - 如果需要,我可以提供帮助。 –

+1

你没有在所有这些平台上运行 - 选择你正在使用的那个将会给你一个答案是正确的**更快** – Hogan

+0

我以表格的形式写出表格A和B以便清楚理解,但不知道为什么它在一条线上。 – khurram

回答

2

好像你想加入,一个case语句(或两个)位置:

SELECT 
    A.Type_id, 
    CASE 
    WHEN B.DC1 = 'D1' THEN A.D1 
    WHEN B.DC1 = 'D2' THEN A.D2 
    WHEN B.DC1 = 'D3' THEN A.D3 
    ELSE 'You got problems' 
    END AS DC1, 
    CASE 
    WHEN B.DC2 = 'D1' THEN A.D1 
    WHEN B.DC2 = 'D2' THEN A.D2 
    WHEN B.DC2 = 'D3' THEN A.D3 
    ELSE 'You got problems' 
    END AS DC2 
FROM TABLE_A A 
JOIN TABLE_B B ON A.Type_id = B.Type_id 
+0

谢谢Hogan它解决了我的问题。 – khurram

+0

很高兴听到它@khurram,祝你好运! – Hogan