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

Iva*_*kov 20 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    |                |
+------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

定制:

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

我希望以下列方式加入表:
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'

到目前为止我做了一切,但第三个条件是问题.如果key = 'votes'自定义中没有条目,则查询仅返回带有条目的条目.NULL如果缺少条目,我想返回.

我需要key = 'votes',因为我有这个page_id的其他条目,其中键不是'投票',这复制了页面中的行

dgw*_*dgw 29

只需将contraint添加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') ;
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说不起作用。可能是mysql版本? (2认同)

Gre*_*HNZ 6

我这样做:

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');
Run Code Online (Sandbox Code Playgroud)