我有一個標籤表,通過連接表 - ID,姓名,owner_id(owner_id是FK用戶)SQL查詢 - 獲取基於一個條件,從表中的行,並基於另一條件
和user_tags表 - user_id,tag_id(用戶之間的鏈接表用戶之間共享這些標籤 - 即,可以訪問該標籤但不是所有者的用戶)標籤
我有一個查詢,可以通過連接user_tags表:
SELECT tags . *
FROM tags
JOIN user_tags ON user_tags.user_id =2
AND user_tags.tag_id = tags.id
LIMIT 0 , 30
但是在同樣的查詢中,我還想選擇selec t標籤WHERE tags.owner_id = 2,通過鏈接表(user_tags)獲取與該用戶共享的所有標籤以及用戶擁有的標籤(tags.owner_id = user_id)。
如果我包括WHERE tags.owner_id = 2後加入,它只返回結果,其中tags.owner_id = 2
如果我包括或tags.owner_id = 2,我得到的所有結果的重複。
如果我發表聲明SELECT DISTINCT... OR tags.owner_id = 2
我最終得到了正確的結果集,但我不確定這是以條件方式執行此操作的正確方法。
有沒有更好的方法/最佳實踐?
另外,爲什麼做了一個連接的結果回報倍數(即爲什麼SELECT DISTINCT
或GROUP BY
必要?
謝謝。
編輯澄清結構的
您可以爲表添加DDL嗎?我很確定user_tags是一個橋表。 tags.owner_id是一個外鍵嗎?知道你的數據關係好一點會有幫助。 – scottb