Mysql 如果行不存在,则选择defalaut值;如果secont表中不存在行,则从多个表中选择

Mysql 如果行不存在,则选择defalaut值;如果secont表中不存在行,则从多个表中选择,mysql,Mysql,我有两张桌子 Permission |id|userID|canView|canEdit| |--+------+-------+-------| |1 | 0 | true | false | (my default value) |2 | 1 | true | true | Users |id|name | |--+-----| |1 |Smith| 如何从权限中选择所有行,并像下面这样从用户表中添加名称列 |id|userID|canView|canEdit

我有两张桌子

Permission
|id|userID|canView|canEdit|
|--+------+-------+-------|
|1 |  0   | true  | false |  (my default value)
|2 |  1   | true  | true  |

Users
|id|name |
|--+-----|
|1 |Smith|
如何从权限中选择所有行,并像下面这样从用户表中添加名称列

    |id|userID|canView|canEdit|name |
    |--+------+-------+-------+-----|
    |1 |  0   | true  | false |NULL | 
    |2 |  1   | true  | true  |Smith|
我试着

SELECT p.* , u.name FROM `Permission` p ,`Users` u WHERE u.id = p.userID
但这是唯一的回报

    |id|userID|canView|canEdit|name |
    |--+------+-------+-------+-----|
    |2 |  1   | true  | true  |Smith|

一种方法是使用
左联接
,如果找不到匹配项,将从右表的列中填充空值:

SELECT 
  p.* , 
  u.name 
FROM `Permission` p 
LEFT JOIN `Users` u 
ON p.userID = u.id

您可能需要花一点时间了解不同的连接类型。左、右、全外连接和交叉连接。我发现以下几点有助于解释它们。