首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询和比较两个不同的表

MySQL查询和比较两个不同的表
EN

Stack Overflow用户
提问于 2014-08-03 16:38:01
回答 2查看 32关注 0票数 0

我对SQL查询非常陌生,所以如果这是一个非常简单的问题,请原谅我。

我有两个数据库表HWCcollectionHWC.idcollection.col中引用

代码语言:javascript
复制
HWC
- id (PRIMARY)
- stuff
- more stuff
- lots more stuff
- Year

collection
- id (PRIMARY)
- userId
- col

问题:

我希望查询集合表中的特定用户,以查看它们丢失了哪些来自HWC的条目。

我甚至不知道从哪里开始逻辑,我不希望有人为我构建这个查询,但我将非常感谢指出正确的方向。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-03 16:47:30

您需要用户丢失的集合中的项。这意味着一个left outer join。特别是,您希望将所有内容保存在HWC表中,并查找缺少的内容:

代码语言:javascript
复制
select hwc.*
from hwc left join
     collection c
     on hwc.id = c.col
where hwc.id is null and c.user_id = @UserId;

在学习SQL时,学生通常学习以下语法:

代码语言:javascript
复制
select hwc.*
from hwc
where hwc.id not in (select c.col from collection c where c.user_id = @UserId);

这是非常好的SQL。有些数据库在优化not in方面做得不太好。而且,当c.colNULL时,它可能会表现得出乎意料。由于这些原因,通常将其重写为not exists查询:

代码语言:javascript
复制
select hwc.*
from hwc
where not exists (select 1
                  from collection c
                  where c.col = hwc.id and c.user_id = @UserId
                 );

我向您提供这些不同的选项,因为您正在学习SQL。这三者是如何工作的,值得一学。将来,您会发现这些机制(left joinnot innot exists)都很有用。

票数 3
EN

Stack Overflow用户

发布于 2014-08-03 16:45:25

听起来您的意思是SQL联接。

SQL教程:

假设您想查询您的集合,如下所示:

代码语言:javascript
复制
SELECT collection.userId, HWC.stuff
FROM collection 
INNER JOIN HWC ON collection.col = HWC.id

--这将从集合中选择userId,并从这些ID有关系的HWC中提取内容。

希望我能帮上忙祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25106782

复制
相关文章

相似问题

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