我有两张桌子:
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表中存储许多不同用户的信息,我想知道它们是否对每个键都有一个空值。那我怎么能做到这一点呢?我知道这一定是某种我不知道的花花公子。
因此,为了澄清:我需要这样的输出:
key | val
is-staff 1
description NULL
image NULL当使用WHERE userID = 99时。目前,我在使用WHERE子句时只得到一行。
发布于 2016-04-19 11:57:07
将谓词从WHERE子句移到join:
SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` and `userID` = 99;发布于 2016-04-19 12:02:38
如果希望获得不匹配的行,则可以使用联接添加where条件,如“ON user-data.keyID = user-data-keys.id和userID = 99”而不是“WHERE 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;https://stackoverflow.com/questions/36717390
复制相似问题