我有一个场景,我有一个带有事件(标题,描述)的表和一个带有标签(标签,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')"
我是否还有其他方式可以执行连接,还是需要执行两个查询,一个用于事件,另一个用于获取匹配标记的事件?
谢谢!
答案 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.header
或tags.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'