Mysql 在联接表上使用where

Mysql 在联接表上使用where,mysql,ruby-on-rails,join,Mysql,Ruby On Rails,Join,我得到了一个场景,其中我得到了一个带有事件(标题、描述)的表和一个带有标记(标记、事件标识)的表,其中包含链接到每个事件的标记 我想做的是能够在Events表中搜索特定的单词,同时在Tags表中搜索单词并获得找到的事件 我能够用以下SQL搜索事件 "SELECT events.* FROM events WHERE (header = 'query')" 但是,当我尝试使用join包含标记时,我没有得到任何回报 "SELECT events.* FROM events INNER JOIN t

我得到了一个场景,其中我得到了一个带有事件(标题、描述)的表和一个带有标记(标记、事件标识)的表,其中包含链接到每个事件的标记

我想做的是能够在Events表中搜索特定的单词,同时在Tags表中搜索单词并获得找到的事件

我能够用以下SQL搜索事件

"SELECT events.* FROM events WHERE (header = 'query')"
但是,当我尝试使用join包含标记时,我没有得到任何回报

"SELECT events.* FROM events INNER JOIN tags ON tags.events_id =
events.id AND WHERE (events.header = 'query' OR tags.tag = 'query')"
是否有其他方法可以执行连接,或者我需要执行两个查询,一个用于事件,另一个用于获取具有匹配标记的事件

谢谢

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
中找到查询时返回事件,则使用后者并将
替换为

编辑:


我忘记包含
events.id=tags.events\u id
语句

删除
之前的
WHERE

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

也许是这样的:

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

为什么WHERE关键字前面有AND关键字?您能添加一些示例数据吗?如果至少有1个标记添加到事件中,并且如果标题或标记是
'query'
Hmm,则此查询应该可以工作,问题是如果搜索查询在任何事件中都不匹配,则此查询不会返回任何内容。假设搜索查询匹配一个标记,此查询确实会按预期返回事件,但前提是标题也匹配。我需要一些类似于或WHERE events.header='query'的东西我猜,后一个似乎工作得更好,但是我在标记匹配中得到了一些奇怪的结果,是否有某种方法可以指定表应该如何连接,并且仍然保持第二个示例中的WHERE子句?您得到了什么奇怪的结果?第二个示例不正确。您需要在两个表之间放置匹配关系,如
tags.events\u id=events.id
。如果没有这一点,您将得到两个表之间的叉积。毫无疑问,你得到了一个奇怪的结果:)似乎我根据你的上一个例子解决了这个问题
code“从事件、标记中选择不同的(events.id),其中events.id=tags.events\u id和tags.tag='query'或events.header='query'”
这将根据其标题或匹配的标记返回正确的事件。非常感谢Roland和@TalhaThis的帮助,他们工作得更好,但是这似乎要求活动有与之相关的标签。我想根据事件的标题或标记检索每个事件。@n在这种情况下,请使用左连接