计算两个相关表中的行

时间:2015-02-19 10:17:38

标签: sql sqlite

我有两个表AB,其中B包含指向A的外键。两个表都有一个flag列。我试图计算A中符合条件的行数:

  1. 已设置标志
  2. B中有一行标志设置
  3. 或以上两者
  4. 我尝试过使用

    SELECT
      COUNT(*)
    FROM
      tableB
      INNER JOIN tableA ON tableA.id=tableB.A_id
    WHERE
      (tableA.flag OR tableB.flag) AND
      [condition]
    

    其中[condition]是无关的条件。但是,这似乎返回了错误的计数。我做错了什么?

    表A列:id(主键),flag

    表B列:id(主键),flagA_id(外键,参考A.id

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
  COUNT(*)
FROM tableA A
WHERE (
    A.flag = 1
    OR EXISTS(
        SELECT 'ROW_IN_B'
        FROM tableB B
        WHERE B.A_id = A.id
        AND B.flag = 1
    )
)
AND [condition]

计算A中所有行,其中A具有flag = 1(true)或在b中存在一行,其中flag = 1(true)。

OR中的这两个条件与名为[condition]

的第三个条件相关