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