我有两张桌子:
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
子句获得一行。
答案 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-data
。keyID
= user-data-keys
。id
和userID
= 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;