根据单一标准从两个表计数

时间:2013-11-03 13:08:21

标签: sql postgresql join count common-table-expression

我正在尝试做这样的事情:

SELECT COUNT(topic.topic_id) + COUNT(post.post_id)
FROM topic, post WHERE author_id = ?

两个表都有列author_id

我收到column reference "author_id" is ambiguous错误。

我怎么能告诉它{两个表中都有author_id

1 个答案:

答案 0 :(得分:4)

虽然可以,但您很可能不想加入这两个表,因为这可能导致不同的计数。本相关答案的解释:
Two SQL LEFT JOINS produce incorrect result

两个子查询最快:

SELECT (SELECT COUNT(topic_id) FROM topic WHERE author_id = ?)
     + (SELECT COUNT(post_id)  FROM post  WHERE author_id = ?) AS result

如果topic_idpost_id在各自的表格中定义为NOT NULL,则可以略微简化:

SELECT (SELECT COUNT(*) FROM topic WHERE author_id = ?)
     + (SELECT COUNT(*) FROM post  WHERE author_id = ?) AS result

如果两个author_id列中至少有一列唯一 JOIN 也可以使用在这种情况下(但速度较慢,我不会使用它):

SELECT COUNT(t.topic_id) + COUNT(p.post_id) AS result
FROM   topic t
LEFT   post  p USING (author_id)
WHERE  t.author_id = ?;

如果您只想输入一次值,请使用CTE

WITH x AS (SELECT ? AS author_id)  -- enter value here
SELECT (SELECT COUNT(*) FROM topic JOIN x USING (author_id))
     + (SELECT COUNT(*) FROM post  JOIN x USING (author_id)) AS result

但一定要了解联接是如何工作的。阅读有关Joined Tables in the manual

的章节