说我有三个表:TableA
,TableB
,和TableC
.每个表都有一列:ColA
.
TableA
是我的主表,TableA.ColA
有一个价值.
我希望检查其中的一个TableB
或者TableC
也有一个ColA
与我相对应的值TableA.ColA
.
所以我的发言是:
select count(*) from TableA, TableB, TableC where ( TableA.ColA = TableB.ColA AND TableA.ColA = "ABC") OR ( TableA.ColA = TableC.ColA AND TableA.ColA = "ABC" )
但这不起作用.
如果我TableB.ColA
没有ColA
值并且TableC.ColA
有值,则返回的结果仍然是0
.我应该算一算1
.
我的select语句有什么问题?
我的TableA数据:
ColA ----- ABC
我的TableB数据:
ColA ---- NULL
我的TableC数据:
ColA ---- ABC
因为TableC.ColA
并且TableA.ColA
具有相同的值,它应该返回我的计数1
.但事实并非如此.我的数据库是SAP ASE
谢谢
你正在做INNER JOIN
,你需要OUTER JOIN
或EXISTS
.对于您正在使用的RDBMS,语法会有所不同.
试试这个:
SELECT COUNT(*) FROM TableA A WHERE A.ColA = "Value" AND ( EXISTS( SELECT * FROM TableB WHERE ColA = "Value" ) OR EXISTS( SELECT * FROM TableC WHERE ColA = "Value" ) )