我想运行一个子查询,该子查询在其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值。但我很确定我在这里写的东西不会削减它。有什么想法吗?
非常感谢
答案 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
请注意,在这种情况下GROUP BY
只是MySQL的事情,通常你需要在{tbl1中的每个选定字段GROUP BY
,即使已知每行tbl1.id是唯一的。< / p>