获取行信息

时间:2011-02-28 04:33:11

标签: sql

我有两张桌子:

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 有人对我如何处理它有任何想法吗?

谢谢:)

2 个答案:

答案 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