簡體   English   中英

子查詢,使用where caluse中的外部查詢中的值

[英]subquery that uses a value from the outer query in the where caluse

我想運行一個子查詢,該子查詢在其where子句中使用外部查詢的值。 這是我想做的事情的例子:

SELECT * FROM `tbl1`
WHERE `tbl1`.`max_count` < (
SELECT COUNT(*) rc FROM `tbl2`
WHERE `tbl2`.`id` = `tbl1`.`id
)

有一個名為max_count的列的tbl1,並且tbl2的行指向tbl1中的一行(多對一關系)。 我想要做的是在tbl1中選擇行,其中引用它的tbl2中的行數小於該行的max_count值。 但我很確定我在這里寫的東西不會削減它。 有任何想法嗎?

非常感謝

嘗試使用JOIN

SELECT  DISTINCT a.*
FROM    tb1 a
        INNER JOIN
        (
            SELECT  id, COUNT(*) totalCount
            FROM    tbl2
            GROUP   BY id
        ) b ON a.ID = b.ID
WHERE   a.max_count < b.totalCount

嘗試這個 -

SELECT * FROM `tbl1` t1
    WHERE t1.`max_count` < (
    SELECT COUNT(*) FROM `tbl2` t2
    WHERE t2.`id` = t1.`id`
    )

作為一種替代解決方案,使用HAVINGLEFT JOIN比使用子查詢更容易;

SELECT tbl1.*, COUNT(tbl2.id) current_count
FROM tbl1
LEFT JOIN tbl2 
  ON tbl1.id=tbl2.id
GROUP BY tbl1.id
HAVING COUNT(tbl2.id) < max_count

一個要測試的SQLfiddle

請注意,在這種情況下GROUP BY只是MySQL的東西,通常你需要在tbl1中的每個選定字段GROUP BY ,即使已知tbl1.id是每行唯一的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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