MySQL 左连接 WHERE table2.field = "X"

标签 mysql join left-join

我有以下表格:

页面:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| page_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| type       | varchar(20)  | NO   |     | NULL    |                |
| categories | varchar(255) | NO   |     | NULL    |                |
| title      | varchar(255) | NO   | MUL | NULL    |                |
| text       | longtext     | NO   | MUL | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

自定义:

+---------+------------------+------+-----+---------+-------+
| Field   | Type             | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| page_id | int(10) unsigned | NO   | PRI | NULL    |       |
| key     | varchar(255)     | NO   | PRI | NULL    |       |
| value   | longtext         | NO   |     | NULL    |       |
+---------+------------------+------+-----+---------+-------+

我想以以下方式加入表格:
1) 返回第一个表中的所有条目 LEFT JOIN custom ON pages.page_id = custom.page_id
2) pages.type IN('type_a', 'type_b', 'type_c')
3)第二个表中的“key”具有值“votes”custom.key = 'votes'

到目前为止,我所做的一切,但第三个条件是问题所在。如果表 custom 中没有 key = 'votes' 条目,则查询仅返回这些条目。如果缺少条目,我想返回 NULL

我需要 key = 'votes',因为我有这个 page_id 的其他条目,其中键不是 'votes',这会复制 pages 中的行p>

最佳答案

只需将您的约束 custom.key='votes' 添加到 LEFT JOIN

SELECT * 
FROM pages LEFT JOIN custom 
     ON pages.page_id=custom.page_id AND custom.key='votes' 
WHERE pages.type IN('type_a','type_b','type_c') ;

关于MySQL 左连接 WHERE table2.field = "X",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973159/

相关文章:

php - Haversine 和 Laravel

mysql - 如果子查询连接列(如果存在),则显示行

database - 将查询 JOIN 重写为 EXISTS

MySQL 列出单个表中的一些字段并计算来自另一个表的所有特定字段引用

mysql - 优化这个慢mysql查询

mysql - 插入记录时对多个表进行约束检查

arrays - hadoop pig 加入任何匹配的元组值

ruby-on-rails - 高效的连接查询 - 可以使用 ActiveRecord 来完成吗

sqlite - 用左外连接链接 3 个表

mysql - gitlab 健康检查不健康