我的数据库中有几个表,想要从几个表中选择几个列,这很好。现在,有一个第3个表,这个表中有一个列中包含不同的文本值,但是对于不同的用户来说只有几个“text_values”,例如:
表3
row userid text_value value
1 user1 text1 value1
2 user1 text2 value2
3 user2 text1 value3
4 user3 text1 value4
...
现在,我想从Table2中的Table1,INFO3和INFO4中获取INFO1和INFO2,但是我想从Table3中获取text_value = text1的所有值,并使用INFO5将其作为第5列,然后从中获取值表3其中text_value = text2并使其成为带有INFO 6的第6列。
我有以下查询,如果我只需要INFO5列,则可以正常工作:
SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid
WHERE Table3.text_value = 'text1'
但是,我希望使用同一个table3 VALUE列中的值创建另一个列,但是当TEXT_VALUE ='text2'时(对于'text3','text4'都是如此,因为有几个文本要“过滤” “上)。
当我将查询更改为以下内容时,它不起作用:
SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5 WHERE Table3.text_value = 'text1'
Table3.value AS INFO6 WHERE Table3.text_value = 'text2'
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid
任何指导都将不胜感激。
答案 0 :(得分:1)
你需要CASE
:
SELECT Table1.INFO1,
Table1.userid,
Table2.INFO2,
Table1.INFO3,
Table2.INFO4,
CASE WHEN Table3.text_value = 'text1' THEN Table3.value END AS INFO5
CASE WHEN Table3.text_value = 'text2' THEN Table3.value END AS INFO6
FROM Table1
LEFT OUTER JOIN Table2
ON Table1.userid = Table2.userid
LEFT OUTER JOIN Table3
ON Table1.userid = Table3.userid
答案 1 :(得分:0)
您的where语句位于错误的位置。它应该在加入之后:
主SQL语法应为:
SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5
Table3.value AS INFO6
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid
WHERE Table3.text_value = 'text1'
and Table3.text_value = 'text2'
答案 2 :(得分:0)
case语句的替代方法是使用Pivot功能,如果你想在没有不必要的连接的情况下向表3添加更多Info#,它将允许你扩展。