[英]In MySQL, how to use a subquery to a left join statement?
我試圖計算t2的子集中與t1相比有多少個新元組
SELECT
COUNT(t2.id)
FROM (
(SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t
LEFT OUTER JOIN
t1
ON
t.id=t1.id
)
WHERE
t1.id IS NULL;
子集定義為
(SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t
但是上面的程序似乎不起作用,發出了錯誤。
無需將FROM
子句包含在()
。 您正在聚合COUNT()
中引用t2.id
,但是您的SELECT
列表將僅從封裝t2
的子查詢中生成t.id
此版本解決了錯誤的來源:
SELECT
COUNT(t.id) AS idcount
FROM
(SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t
LEFT OUTER JOIN t1 ON t.id = t1.id
WHERE t1.id IS NULL
由於您的子查詢實際上非常簡單,因此我認為根本沒有必要。 整個過程可以通過LEFT JOIN
:
SELECT
/* The equivalent of COUNT(*) in this context */
COUNT(t2.id) AS idcount
FROM
t2
LEFT OUTER JOIN t1 ON t2.id = t1.id
WHERE
t1.id IS NULL
AND (t2.col2 = 0 AND t2.col3 = 0)
您確定不想執行COUNT(t.id)嗎? t2在子查詢中,並且對主查詢不可用,只有t和t1可用。
問題是別名。 你有:
select count(t2.id)
但是,t2是在子查詢中定義的,因此不在范圍內。
你要:
select count(t.id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.