如何select full left table and where condition match records from right table?

How to select full left table and where condition match records from right table?

请有人告诉我如何做这些东西。我有两个 tables ,我需要 select 整个第一个 table(页面)和第二个 table 其中 user_id = 1

table 1: 页数

--------------------------------------
  page_id  |  page_url |   details   |  
--------------------------------------
      1    |    xxxx   |   wdredrr   |
      2    |    yyyy   |   rdsacsa   |
      3    |    zzzz   |   rscsacc   |
      4    |    aaaa   |   xdsxsxs   |
      5    |    bbbb   |   drxcraa   |
--------------------------------------

table 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 个匹配的行

将你的 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 joinjoining 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;