我正在尝试将attr3
的多个表中的所有记录计为值1。
这是我到目前为止所做的:
SELECT 'Dept' AS table_name, COUNT(*)
FROM table1, table2
WHERE table1.attr3='1' AND table2.attr3='1'
我遇到的问题是它显示错误的数字。它应显示为7
,而不是12
。
我必须以这样的方式编写它,因为attr3
是外键,因此某些解决方案可能会出现attr3 is ambiguous
任何人都知道我可能会出错?谢谢
修改
然后,我想再次应用相同的查询两次,但使用不同的值来获取单独的计数:
SELECT 'Dept' AS table_name, COUNT(*)
FROM table1, table2
WHERE table1.attr3='2' AND table2.attr3='2'
最小化代码将是一个很大的优势!
答案 0 :(得分:0)
您应该使用UNION
而不是JOIN
来组合这两个表,因为您不会在表之间相互关联行。然后使用GROUP BY
获取每个attr3
的计数。
SELECT attr3, COUNT(*)
FROM (
SELECT attr3 FROM table1
UNION ALL
SELECT attr3 FROM table2
) AS u
GROUP BY attr3
最好分别对每个表中的计数进行计数,然后对它们求和。如果您在attr3
上有索引,则可以利用它。
SELECT attr3, SUM(count)
FROM (
SELECT attr3, COUNT(*) AS count
FROM table1
GROUP BY attr3
UNION ALL
SELECT attr3, COUNT(*)
FROM table2
GROUP BY attr3
) AS u
GROUP BY attr3
请务必使用UNION ALL
,而不只是UNION
,因为默认情况下会删除重复项。
答案 1 :(得分:0)
逗号运算符创建笛卡尔积。这会产生比你想要的更多行(在大多数情况下)。相反,请将union all
与您的条件一起使用:
SELECT 'Dept' AS table_name, COUNT(*)
FROM ((select attr3 from table1) union all
(select attr3 from table2)
) t
WHERE attr3 = '1';