Использование где на объединенном столе - PullRequest
0 голосов
/ 24 августа 2011

У меня есть сценарий, в котором я получил таблицу с событиями (заголовок, описание) и таблицу с тегами (tag, event_id), которая содержит теги, связанные с каждым событием.

Что бы я хотелсделать это, чтобы иметь возможность искать определенное слово в таблице событий и в то же время искать слово в таблице тегов и получить найденные события.

Я могу искатьсобытия со следующим SQL

"SELECT events.* FROM events WHERE (header = 'query')"

Но когда я пытаюсь включить теги в объединение, я ничего не получаю взамен

"SELECT events.* FROM events INNER JOIN tags ON tags.events_id =
events.id AND WHERE (events.header = 'query' OR tags.tag = 'query')"

Есть ли другой способ, которым я могу выполнитьприсоединение или мне нужно выполнить два запроса, один для событий и один для получения событий, которые получили соответствующий тег?

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Удалить AND до WHERE

SELECT events.* 
FROM events INNER JOIN tags ON tags.events_id = events.id -- NO AND
WHERE (events.header = 'query' OR tags.tag = 'query')
1 голос
/ 24 августа 2011
SELECT 
  events.* 
FROM 
  events 
  LEFT JOIN 
    tags 
  ON 
    tags.events_id = events.id
WHERE 
  tags.tag = 'query' OR
  events.header = 'query'

или это:

SELECT 
  events.* 
FROM 
  events,
  tags 
WHERE
  events.id = tags.events_id AND
  events.header = 'query' AND
  tags.tag = 'query'

Но если вы имели в виду возвращение события, если запрос был найден в event.header или tags.tag, то используйте последнее и замените AND с OR

РЕДАКТИРОВАТЬ:

Я забыл включить events.id = tags.events_id заявление

0 голосов
/ 24 августа 2011

Возможно что-то вроде этого:

SELECT  
  events.*  
FROM  
  events RIGHT OUTER JOIN  tags  ON events.id = tags.events_id
WHERE
  events.header = 'query' OR
  tags.tag = 'query' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...