0

where句で外側のクエリの値を使用するサブクエリを実行したい。これが私がやりたいことの例です:

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

max_count という名前の列を持つ tbl1 と、tbl1 (多対 1 の関係) の行を参照する行を持つ tbl2 があります。私がしたいのは、それを参照する tbl2 の行数がその行の max_count 値よりも少ない tbl1 の行を選択することです。でも、ここに書いたことは絶対にダメだと思います。何か案は?

どうもありがとう

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 BY、tbl1.id が行ごとに一意であることがわかっている場合でも、tbl1 で選択されたすべてのフィールドが必要です。

于 2013-07-20T10:09:09.180 に答える