mysql - Where 子句不能按预期与联结表一起工作?

标签 mysql sql join junction-table

我有一个连接表,它在其他两个表之间创建多对多关系。这是图表。

enter image description here

这是我的基本 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)

我也试过用 JOINON 中添加条件,但结果是一样的。请问我做错了什么?

编辑:

此查询的目的是获取一个或多个标签以及与其关联的 URL 列表。我需要能够使用多个 AND 运算符来仅检索那些特定的标签。它需要像堆栈溢出一样工作,其中有一个问题 (URL) 和附加的多个标签。

最佳答案

您需要在 where 子句中使用 OR 而不是 AND,因为您要同时查找数据库和问答。

所以 where 条件应该像 WHEREtags.tag_name = 'database' OR 'q&a'

关于mysql - Where 子句不能按预期与联结表一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340573/

相关文章:

sql - 改进 xpath 评估的 SQL 查询

sql - 如何加快 PostgreSQL 中的插入性能

join - 优化加入 HIVE 查询 : c

mysql - 如何在 MySQL/MariaDB 中连接两个大表?

Mysql 更新 select 语句

mysql - DBLint 规则 31 意味着

MySQL 按 "best match"排序

c++ - MySQL触发器错误#2013-查询期间与MySQL服务器的连接断开

javascript - 用于仅显示项目的 Oracle APEX 格式掩码

mysql - 将 3 个表连接到一个表(连接 4 个表)