我正在尝试做这样的事情:
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
?
答案 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_id
和post_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。
的章节