[英]How to select full left table and where condition match records from right table?
请有人告诉我该怎么做。 我有两个表,我需要选择整个第一个表(页面),并从第二个表中选择user_id = 1
表1:页
--------------------------------------
page_id | page_url | details |
--------------------------------------
1 | xxxx | wdredrr |
2 | yyyy | rdsacsa |
3 | zzzz | rscsacc |
4 | aaaa | xdsxsxs |
5 | bbbb | drxcraa |
--------------------------------------
表2:控制
-------------------------------------
control_id | page_id | user_id |
-------------------------------------
1 | 1 | 1 |
2 | 3 | 1 |
3 | 4 | 1 |
4 | 1 | 2 |
5 | 2 | 2 |
-------------------------------------
这就是预期的输出。
期望的输出
--------------------------------------------------------------
page_id | page_url | details | control_id | user_id |
--------------------------------------------------------------
1 | xxxx | wdredrr | 1 | 1 |
2 | yyyy | rdsacsa | null | null |
3 | zzzz | rscsacc | 2 | 1 |
4 | aaaa | xdsxsxs | null | null |
5 | bbbb | drxcraa | 3 | 1 |
--------------------------------------------------------------
页面JOIN控件打开page.page_id = control.page_id WHERE control.user_id ='1'
请有人帮忙解决这个问题。 我尝试了LEFT JOIN和RIGHT JOIN,但是我只获得了user_id = 1个匹配的行
将your where子句放在on子句中,您应该得到预期的结果:
select * from pages JOIN control ON page.page_id = control.page_id AND control.user_id = '1'
尝试这个
SELECT p.page_id, p.page_url, p.details, IF(c.user_id=1,c.control_id,NULL), IF(c.user_id=1,c.user_id,NULL) FROM page p LEFT JOIN control c ON(c.page_id=p.page_id)
Inner join
将检查相关数据是否具有相关表中的联接条件,因此它将过滤出不匹配的数据。 您需要使用left join
并且joining clause
的条件如下所示:
select
p.*,
c.control_id,
c.user_id
from page p left join control c on c.page_id = p.page_id and c.user_id = 1
order by p.page_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.