我有一个联结表,可在两个其他表之间创建多对多关系。这是图。Where子句不按预期方式与联结表一起工作?
这里是我的基本SQL查询。
SELECT `tag_to_url`.url_id, `websites`.url, `tags`.tag_name
FROM `tag_to_url`
INNER JOIN (`websites`,`tags`) ON `websites`.url_id = `tag_to_url`.url_id
AND `tag_to_url`.tag_id = `tags`.tag_id
ORDER BY `tag_to_url`.url_id
这是一个例子结果。
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| google.com | search |
| google.com | e-mail |
| stackexchange.com | q&a |
| stackexchange.com | programming |
| stackexchange.com | database |
+--------------------+-------------+
这些结果基本上是我在寻找的东西,尽管我试图对无法正常工作的URL进行分组。如果我包含一个WHERE
子句,查询也将正常工作。
...
...
WHERE `tags`.tag_name = 'database'
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| stackexchange.com | database |
+--------------------+-------------+
但是,当我AND
经营者添加到WHERE
条件,我期待这一点。
WHERE `tags`.tag_name = 'database' AND `tags`.tag_name = 'q&a'
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| stackexchange.com | database |
| stackexchange.com | q&a |
+--------------------+-------------+
不过,我得到:
MySQL returned an empty result set (i.e. zero rows). (Query took 0.0027 sec)
我也试图与JOIN
添加条件ON
但结果是一样的。请问我做错了什么?
编辑:
此查询的目的是为了与他们有联系的URL列表以及获取一个或多个标签。我需要能够使用多个AND
运算符来检索这些特定标签。它需要像堆栈溢出一样工作,其中存在问题(URL)和多个标签。
这是我的错误,我纠正了它。仍然不返回任何行。 – EternalHour 2014-12-07 09:36:46
你正在做'AND',这意味着'tag_name'同时获得'database'和'q&a'这一行,而且这是不可能的。改变'AND'为'OR'或'IN' – 2014-12-07 09:41:28
我建议有'trim(tags.tag_name)='database'或trim(tags.tag_name)='q&a''或者trim(tags.tag_name)在('数据库','q&a')中'这将确保如果有空白,那么在搜索之前这将被照顾。另外,在某些情况下,如果未正确完成保存,'&'可以从前端以'&'保存在数据库中。 – 2014-12-07 09:47:00