SQL查询根据where子句中的其他表选择列

时间:2017-06-09 17:17:33

标签: sql

我需要编写一个查询,该查询应该根据其他表从表中提取数据,我的列名也将依赖于其他表

假设我有表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选择列名称或按顺序修复因为table有很多type_id并且会增长。

结果应该是:

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

1 个答案:

答案 0 :(得分: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