0
我有3個表:SQL查詢 - 加入在先前的所有行加入
- 頁(ID,姓名,DESC)
- page_tags(ID,PAGE_ID,TAG_ID)
- tag_posts (TAG_ID,POST_ID)
給出一個頁面在頁面表,我想要得到的職位tag_posts表,其中TAG_ID匹配全部 page_tags表中給定頁面的tag_ids。
舉例來說,如果在3個表中的條目是:
1)的網頁:
- [1,頁面1「, '一些降序']
2)page_tags:
- [1,1,1],
- [2,1,2]
3)tag_posts:
- [1,101],
- [2,102],
- [1,201],
- [3,202]
我沒有使用這個查詢的3個表的簡單內連接:
SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE 1
然而,這將返回上面而我想只行1從樣品tag_posts表中的行1,2和3和2這兩行匹配全部 tag_id第一次連接頁面和page_tags表之間的行。
請讓我知道如何才能做到這一點。注意:我正在使用mysql。
我的第一個連接是網頁和page_tags之間,這讓我對給定頁面的所有標籤。我希望第二次加入給我的帖子匹配所有來自第一次加入的標籤。我希望我明確表達了我的要求。 – Rainbard
你的加入是正確的。在上面的示例中,頁面1在page_tags表中被引用兩次。在英文中,第1頁的標籤帶有標識1和2.這些標籤在tag_posts表中被引用了3次。在tag_posts表中,第1行和第3行引用標記1,第2行引用標記2.這就是爲什麼您爲頁面1獲得3個標記而不是2個標記。如果我錯誤地解釋你的表格,請告訴我。 –