改造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