兩個表中選擇:SQL通過連接表與地方或條款
任務 - ID,creator_id(休息不相關)
tag_tasks - TAG_ID,TASK_ID
我想通過搶任務tag_tasks通過一個標籤ID數組,但也可以抓取具有特定creator_id的任務。
這是我目前執行該語句(不工作):
SELECT tasks.id, tasks.content
FROM `tasks`
JOIN tag_tasks ON tasks.id = tag_tasks.task_id
WHERE (
`tag_tasks`.`tag_id`
IN (1,2,3)
)
OR tasks.creator_id =1
GROUP BY tasks.id
ORDER BY `tasks`.`id` DESC
這將通過tag_tasks表返回任何任務,但忽略了沒有記錄在我的連接表任務。
,我想要的是一個單一的查詢,將做到這一點:
SELECT tasks.id, tasks.content
FROM `tasks`
JOIN tag_tasks ON tasks.id = tag_tasks.task_id
WHERE (
`tag_tasks`.`tag_id`
IN (1,2,3)
)
GROUP BY tasks.id
ORDER BY `tasks`.`id` DESC;
和
SELECT tasks.id, tasks.content
FROM tasks
WHERE tasks.creator_id =1
GROUP BY tasks.id
ORDER BY `tasks`.`id` DESC
LIMIT 0 , 30
這可能嗎?
謝謝。
第一個查詢不返回任務WHERE creator_id = 1,只有那些有tag_task記錄(我原來的問題),這些任務。第二個查詢會產生一個錯誤:「having clause」中的未知列'tasks.creator_id'。無論哪種方式,我都會用我的解決方案編輯我的問題,並感謝您通知我有,我必須查找。 – Squadrons
@Squadrons。 。 。這些問題使用'left outer join'('或'忽略'NULL'值)來解決。儘管你在問題中確實表示「不匹配」,但是我迷惑了自己,並不確定這是否意味着根本沒有匹配的標籤記錄,或者沒有標識符爲1,2或3. –
無論如何,我感覺這種類型加入是什麼導致我的問題。我會閱讀加入以更好地教育自己。感謝您的幫助。 – Squadrons