对应的表数据如下
现在的需求是要找出dcid为9951,9957,9064共同拥有的good_code。
第一种方案是
SELECT
a.good_code
FROM
(
SELECT
good_code
FROM
XXX
WHERE
dcid = '9951'
) a
INNER JOIN (
SELECT
good_code
FROM
XXX
WHERE
dcid = '9957'
) b ON a.good_code = b.good_code
INNER JOIN (
SELECT
good_code
FROM
XXX
WHERE
dcid = '9064'
) c ON a.good_code = c.good_code;
第一种方案的思路是先分别找出表中dcid为9951,9957,9064的记录,然后把这些记录作内连接,这样的做法可以得到正确的结果,但是非常耗时,耗费的时间是0.3秒左右。
==================分割线=============
第二种方案是
SELECT good_code from XXX where dcid in ('9951','9957','9064') GROUP BY good_code HAVING count(good_code)=3
第二种方案的思路是先筛选出dcid为9951,9957,9064的记录,然后对筛选后的记录用good_code进行分组group by good_code,并对分组后的记录进行筛选HAVING count(good_code)=3,这里的count(good_code)是对同样的good_code进行计数,则我们可以判断当good_code的计数为3(也就是good_code有3条记录,分别对应9951,9957,9064)的就是符合我们要找的,此种sql耗费的时间是0.05秒左右,缩短了查询需要的时间。