我有这个查询,它工作得很好,但我想改进它,编写它没有子查询。这可能吗?虽然我试了很多次,但还是没有得到正确的结果。
SELECT * FROM store_product
WHERE product_id NOT IN (
SELECT entity_id
FROM import_pack_file_element
WHERE entity_id IS NOT NULL
AND import_pack_file_id IN (135)
AND status = 'DONE') AND store_id = 65
5条答案
按热度按时间aelbi1ox1#
您可以尝试这样做(但最好改用子查询):
您可以修改
LEFT JOIN
部分和WHERE
根据你的需要分开。还有:[key]到表键,[table alias]到表别名。
同样,u可以替换in(135),使用等号
=
,in用于多个需要比较或验证的元素。参考文献如下:
左连接
7gcisfzg2#
你可以用一个
EXISTS
条款:ehxuflar3#
你可以重写一个
NOT EXISTS
或者NOT IN
查询到反联接。不过,我看不出你为什么要这么做。反连接通常用在有问题的dbms上[NOT] IN
/[NOT] EXISTS
,mysql应该不是这样。反连接是防御dbms弱点的一种手段,其代价是失去可读性。v1uwarro4#
我不完全了解您的table设计,但这可能有用:
5ssjco0h5#
可以使用left join和is null条件