在工作中我遇到了这种疑问:
select distinct psv.pack_id from pack_store_variant psv, pack p
where p.id = psv.pack_id and p.store_id = 1 and psv.store_variant_id = 196;
成为select from table1, table2
的新手我做了一些搜索,发现这基本上是两张桌子的笛卡尔积。我认为这是不必要地创建NxM行,我们可以使用常规连接,它应该工作。所以我写了这个查询:
SELECT DISTINCT pack_id from (SELECT pack_id, store_id, store_variant_id
FROM pack JOIN pack_store_variant ON pack.id = pack_store_variant.pack_id) as comb
where comb.store_id = 1 AND comb.store_variant_id = 196;
令人惊讶的是,当我进行比较时,第一个比我的快一个数量级。我的查询是否以某种方式吮吸?或者我不正确理解交叉连接/内部连接之间的区别吗?
答案 0 :(得分:1)
您的查询不太好。您将查询拆分为两个选择。内部创建一个表,然后再次选择。这不是很有效率。我就是这样做的。
select distinct psv.pack_id from pack_store_variant as psv
Join pack as p on p.id = psv.pack_id
where p.store_id = 1 and psv.store_variant_id = 196;