0

我想运行一个在其 where 子句中使用外部查询值的子查询。这是我想做的示例:

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

tbl1 的列名为 max_count,tbl2 的行引用 tbl1 中的行(多对一关系)。我想做的是在 tbl1 中选择行,其中 tbl2 中引用它的行数小于该行的 max_count 值。但我很确定我在这里写的东西不会删掉它。有任何想法吗?

非常感谢

4

3 回答 3

1

尝试这个 -

SELECT * FROM `tbl1` t1
    WHERE t1.`max_count` < (
    SELECT COUNT(*) FROM `tbl2` t2
    WHERE t2.`id` = t1.`id`
    )
于 2013-07-20T10:37:52.923 回答
1

尝试使用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
于 2013-07-20T10:00:59.697 回答
0

作为替代解决方案,使用LEFT JOINwith可能HAVING比使用子查询更容易;

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,通常您需要GROUP BYtbl1 中的每个选定字段,即使已知 tbl1.id 每行都是唯一的。

于 2013-07-20T10:09:09.180 回答