我有以下表格:
网页:
+------------+--------------+------+-----+---------+----------------+
| 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)第二个表中的“密钥”具有值“投票”custom.key = 'votes'
到目前为止,我做了一切,但第三个条件是问题。如果表自定义中没有key = 'votes'
条目,则查询仅返回带有条目的条目。如果缺少条目,我想返回NULL
。
我需要key = 'votes'
,因为我有这个page_id的其他条目,其中密钥不是'投票',这会重复页面中的行
答案 0 :(得分:27)
只需将约束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') ;
答案 1 :(得分:5)
我会这样做:
SELECT *
FROM pages
LEFT JOIN
( SELECT * From custom where key='votes') cv
on pages.page_id = cv.page_id
WHERE pages.type IN ('type_a', 'type_b', 'type_c');
答案 2 :(得分:1)
尝试将where条件更改为custom.key ='votes'或者custom.key为null。