SQL联接 - 从右表

时间:2016-04-19 11:43:48

标签: mysql

我有两张桌子:

user-data

id | userID | keyID | val
1    99       1       1 

user-data-keys

id | key           
1    is-staff
2    description
3    image

现在,当我运行以下SQL时,我得到了所需的输出:

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id`;

产生:

key         | val
is-staff      1
description   NULL
image         NULL

这正是我想要的。但是,当我向SQL添加WHERE子句时:

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` WHERE `userID` = 99;

我只获得了is-staff的一行。据我所知,因为我只要求userID = 99行。但是我计划在一个user-data表中存储大量不同的用户信息,我想知道它们是否具有每个键的NULL值。那我该怎么做呢?我知道它必须是某种我不知道的花哨的加入。

所以澄清:我需要这样的输出:

key         | val
is-staff      1
description   NULL
image         NULL

使用WHERE userID = 99时。目前我只使用WHERE子句获得一行。

2 个答案:

答案 0 :(得分:4)

将谓词从WHERE子句移动到连接:

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` and `userID` = 99;

答案 1 :(得分:0)

如果您想获得不匹配的行,那么您可以添加带有连接的条件,例如"在user-datakeyID = user-data-keysiduserID = 99"而不是"在userID = 99",

SELECT `key`,`val` 
FROM `user-data` 
RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` AND `userID` = 99 
WHERE 1;