子查询,它使用where子句中外部查询的值

时间:2013-07-20 09:57:07

标签: mysql database

我想运行一个子查询,该子查询在其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值。但我很确定我在这里写的东西不会削减它。有什么想法吗?

非常感谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

试试这个 -

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

答案 2 :(得分:0)

作为替代解决方案,使用LEFT JOIN 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

An SQLfiddle to test with

请注意,在这种情况下GROUP BY只是MySQL的事情,通常你需要在{tbl1中的每个选定字段GROUP BY,即使已知每行tbl1.id是唯一的。< / p>