最佳SQLite查询删除重复项
发布时间:2020-12-12 18:55:10 所属栏目:百科 来源:网络整理
导读:我有两个表,具有以下设置: category: (id,name)item: (id,name,category_id) - category_id is foreign key to category table 现在我正在编写一个查询来检索仅使用类别的类别表中的子集: SELECT c.id,c.nameFROM category cWHERE c.id IN (SELECT DISTINC
我有两个表,具有以下设置:
category: (id,name) item: (id,name,category_id) - category_id is foreign key to category table 现在我正在编写一个查询来检索仅使用类别的类别表中的子集: SELECT c.id,c.name FROM category c WHERE c.id IN (SELECT DISTINCT category_id FROM item) 以上查询工作正常.我只是想知道这是否是进行查询的最佳方式,或者是否还有其他我可以通过连接或其他方式做的事情 解决方法将IN(SELECT)转换为EXISTS(SELECT … WHERE)可能会有所帮助:SELECT c.id,c.name FROM category c WHERE EXISTS (SELECT 1 FROM item WHERE item.category_id = c.id) 另一种可能性(我希望它更慢,但它总是取决于你的数据库): SELECT c.id,c.name FROM category c INNER JOIN item ON item.category_id = c.id GROUP BY c.id 或者您可以使用DISTINCT而不是GROUP BY: SELECT DISTINCT c.id,c.name FROM category c INNER JOIN item ON item.category_id = c.id 如果速度非常重要,请不要忘记不时打电话给ANALYZE: http://www.sqlite.org/lang_analyze.html 其他一些有趣的变种: SELECT c.id,c.name FROM category c INNER JOIN (SELECT DISTINCT item.category_id ) AS i_c ON i_c.category_id = c.id 另一个: SELECT c.id,c.name FROM category c EXCEPT SELECT c.id,c.name FROM category c LEFT JOIN item ON item.category_id = c.id WHERE item.category_id IS NULL (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |