改造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
我的赌注是在查询中,就在*“fun”*之后。 – 2012-08-12 23:37:16
谢谢biziclop! – goodnoodle 2012-08-14 00:06:25