在连接表上使用where

时间:2011-08-24 08:15:20

标签: mysql ruby-on-rails join

我有一个场景,我有一个带有事件(标题,描述)的表和一个带有标签(标签,event_id)的表,其中包含链接到每个事件的标签。

我想要做的是能够在Events-table中搜索特定单词,同时在Tags-table中搜索单词并获取找到的事件。

我可以使用以下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 个答案:

答案 0 :(得分:1)

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.headertags.tag中找到查询,那么您的意思是返回事件,然后使用后者并将AND替换为OR

修改

我忘了包含events.id = tags.events_id声明

答案 1 :(得分:1)

删除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')

答案 2 :(得分:0)

也许是这样的:

SELECT  
  events.*  
FROM  
  events RIGHT OUTER JOIN  tags  ON events.id = tags.events_id
WHERE
  events.header = 'query' OR
  tags.tag = 'query'