簡體   English   中英

在MySQL中,如何對左連接語句使用子查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM