2013-10-15 2 views
0

У меня есть 3 таблицы:SQL запросов - Регистрация на все строки предыдущего присоединиться к

  1. страница (номер, имя, DESC)
  2. page_tags (идентификатор, page_id, tag_id)
  3. tag_posts (tag_id, post_id)

Учитывая страницы в таблице страниц, я хочу, чтобы получить сообщения в таблице tag_posts где tag_id соответствует ALL tag_ids для данной страницы в таблице page_tags.

Например, если записи в 3-х таблиц:

1) страницы:

  1. [1, 'страница 1', 'некоторые убывание']

2) page_tags:

  1. [1, 1, 1],
  2. [2, 1, 2]

3) tag_posts:

  1. [1, 101],
  2. [2, 102],
  3. [1, 201],
  4. [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, 2 и 3 из таблицы образцов tag_posts выше, тогда как я хотел только строки 1 и 2, так как эти две строки соответствуют ALL строки tag_id из первого соединения между страницами и таблицей page_tags.

Пожалуйста, дайте мне знать, как я могу это достичь. Примечание. Я использую mysql.

ответ

1

Я смущен. Таблица tag_post имеет 3 совпадения (строки 1 2 и 3), потому что tag_post, где tag_id = 1, сопоставляется дважды. Поэтому я бы сказал, что это правильно в том, что вы видите.

Если вы пытаетесь найти tag_posts для указанной страницы, то этот запрос будет это ...

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 p.id = 1 
+0

Мой первый присоединиться между страницами и page_tags, и это дает мне все теги для данной страницы. Я хочу, чтобы второе соединение давало мне сообщения, которые соответствуют всем тегам из первого соединения. Надеюсь, я четко изложил свое требование. – Rainbard

+0

Ваша ссылка верная.В приведенном выше примере страница 1 ссылается дважды в таблицу page_tags. На английском языке, страница 1 имеет теги с идентификаторами 1 и 2. Эти теги ссылаются 3 раза в таблице tag_posts. В таблице tag_posts, Row 1 и 3 reference tag 1 и Row 2 reference tag 2. Вот почему вы получаете 3 тега для страницы 1, а не 2 тега. Дайте мне знать, если я неправильно интерпретирую ваши таблицы. –

Смежные вопросы