を に変換する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