我想要来自三个表的结果,其中第一个表的结果必须是。为此,我使用Left Outer Join基于 sno (主键)链接表。查询运行正常,但是当我想从不同标准的第三个表中选择结果时,我会增加复杂性。
在查看我如何检索结果时,问题将会清楚:
SELECT * FROM tw_main MainTable
LEFT OUTER JOIN tw_details TW
ON TW.sno = MainTable.sno
LEFT OUTER JOIN tw_typedetails CWR
ON CWR.sno = MainTable.sno WHERE CWR.twcatname = 'CWR'
LEFT OUTER JOIN tw_typedetails OHT
ON OHT.sno = MainTable.sno WHERE OHT.twcatname = 'OHT'
LEFT OUTER JOIN tw_typedetails DS
ON DS.sno = MainTable.sno WHERE DS.twcatname = 'DS'
WHERE
MainTable.sno = 420;
如果我只使用第三个表(tw_typedetails)一次,这个查询工作正常,但我想从同一个表中使用不同的WHERE子句的单独结果集。
需要进行哪些更正?我正在使用SQL Server 2008 R2 Express。此查询应该从Crystal Reports命令运行。
答案 0 :(得分:6)
你有几个where
条款太多了。
请尝试使用and
。
SELECT * FROM tw_main MainTable
LEFT OUTER JOIN tw_details TW
ON TW.sno = MainTable.sno
LEFT OUTER JOIN tw_typedetails CWR
ON CWR.sno = MainTable.sno AND CWR.twcatname = 'CWR'
LEFT OUTER JOIN tw_typedetails OHT
ON OHT.sno = MainTable.sno AND OHT.twcatname = 'OHT'
LEFT OUTER JOIN tw_typedetails DS
ON DS.sno = MainTable.sno AND DS.twcatname = 'DS'
WHERE
MainTable.sno = 420;
答案 1 :(得分:3)
将where
子句移到on
子句:
LEFT OUTER JOIN tw_details TW
ON TW.sno = MainTable.sno
AND MainTable.sno = 420
或允许null
子句中的where
值:
WHERE MainTable.sno is null or MainTable.sno = 420;