我有两张桌子:
T1
ID post_id *more columns like post date, etc.
1 100
2 101
3 102
T2
ID post_id subid1 subid2 text
1 100 1 1 AAA
2 100 1 2 BBB
3 101 1 1 FFF
4 102 1 1 HHH
5 102 1 2 NNN
如果我想获得例如帖子100的信息,我将使用正常的select * from t1,t2得到表1和表2的信息,其中t1.post_id = t2.post_id ..我将得到2行:一行带有subid1 = 1,subid2 = 1带有文本AAA,另一行带有subid1 = 1,subid2 = 2带有文本BBB。但我需要只有一行包含两个不同的文本,例如:
post_id text1 text2
100 AAA BBB
我尝试使用左连接和子查询,但我总是得到2行或查询错误U_U 有人对我如何处理它有任何想法吗?
谢谢:)
答案 0 :(得分:3)
您所寻求的通常称为“交叉表”查询。 SQL语言不是为动态列生成而设计的,因此大多数产品都不提供任何功能,您可以使用它动态生成所需的列。但是,您可以通过静态定义列来生成将返回所需信息的查询:
Select T2.post_id
, Min( Case When T2.subid2 = 1 Then T2.text End ) As text1
, Min( Case When T2.subid2 = 2 Then T2.text End ) As text2
From T2
Where T2.post_id = 100
Group By T2.post_id
答案 1 :(得分:1)
我找到了另一个解决方案:对每个案例使用两个左连接。
select * from t1
left join (select answertext as text1 from t2 where subid1=1 and subid2=1) D
on t1.postid=t2.postid
left join (select answertext as text2 from t2 where subid1=1 and subid2=2) D
on t1.postid=t2.postid