SQL select 语句结合不同的表

SQL select statement combining with different tables

假设我有三个 table:TableATableBTableC。这些 table 中的每一个都有一列:ColA.

TableA 是我的主要 table 并且 TableA.ColA 有一个值。

我想检查 TableBTableC 在它们的 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 有值,结果 returned 仍然是 0。我应该得到 1 的计数。

我的 select 陈述有什么问题?

我的表A数据:

ColA
-----
ABC

我的表B数据:

ColA
----
NULL

我的 TableC 数据:

ColA
----
ABC

因为TableC.ColATableA.ColA有相同的值,它应该return我数1。但它并没有这样做。我的数据库是 SAP ASE

谢谢

您正在做 INNER JOIN,您需要 OUTER JOINEXISTS。语法会因您使用的 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"            
            )
        )
select count(*) 
 from TableA
      LEFT JOIN
      TableB
      ON TableA.ColA = TableB.ColA
      LEFT JOIN
      TableC
      ON TableA.ColA = TableC.ColA
where TableA.ColA = "Value"
      AND
      (TableB.ColA IS NOT NULL OR TableC.ColA IS NOT NULL) 

这里的想法是:

  1. 使用 LEFT JOIN 以便无论 TableBTableC 是否有一行,都会生成该行。如果其中之一或两者都没有,则对应的值为 NULL
  2. 过滤掉 TableBTableC 都没有这些值的行,方法是要求其中至少一个在 WHERE 子句中不是 NULL