Trong bất kỳ trường hợp nào sau đây, nếu bạn không biết PROJECT.num
/PROJECT_TO_TAGS.project_id
, bạn sẽ phải tham gia vào PROJECTS
để nhận giá trị id để tìm ra những thẻ mà nó đã liên kết.
Sử dụng IN
SELECT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
WHERE pt.tag_id IN (SELECT x.tag_id
FROM PROJECTS_TO_TAGS x
WHERE x.project_id = 4)
Sử dụng EXISTS
SELECT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
WHERE EXISTS (SELECT NULL
FROM PROJECTS_TO_TAGS x
WHERE x.project_id = 4
AND x.tag_id = pt.tag_id)
Sử dụng JOINS (đây là cách hiệu quả nhất!)
DISTINCT
là cần thiết vì JOIN có nguy cơ dữ liệu trùng lặp xuất hiện trong tập kết quả ...
SELECT DISTINCT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
JOIN PROJECTS_TO_TAGS x ON x.tag_id = pt.tag_id
AND x.project_id = 4