首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL从正确的表收集所有

SQL从正确的表收集所有
EN

Stack Overflow用户
提问于 2016-04-19 11:43:47
回答 2查看 30关注 0票数 1

我有两张桌子:

user-data

代码语言:javascript
复制
id | userID | keyID | val
1    99       1       1 

user-data-keys

代码语言:javascript
复制
id | key           
1    is-staff
2    description
3    image

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

代码语言:javascript
复制
SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id`;

它产生:

代码语言:javascript
复制
key         | val
is-staff      1
description   NULL
image         NULL

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

代码语言:javascript
复制
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表中存储许多不同用户的信息,我想知道它们是否对每个键都有一个空值。那我怎么能做到这一点呢?我知道这一定是某种我不知道的花花公子。

因此,为了澄清:我需要这样的输出:

代码语言:javascript
复制
key         | val
is-staff      1
description   NULL
image         NULL

当使用WHERE userID = 99时。目前,我在使用WHERE子句时只得到一行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-19 11:57:07

将谓词从WHERE子句移到join:

代码语言:javascript
复制
SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` and `userID` = 99;
票数 4
EN

Stack Overflow用户

发布于 2016-04-19 12:02:38

如果希望获得不匹配的行,则可以使用联接添加where条件,如“ON user-data.keyID = user-data-keys.iduserID = 99”而不是“WHERE userID = 99 ",

代码语言:javascript
复制
SELECT `key`,`val` 
FROM `user-data` 
RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` AND `userID` = 99 
WHERE 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36717390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档