我对SQL查询非常陌生,所以如果这是一个非常简单的问题,请原谅我。
我有两个数据库表HWC和collection,HWC.id在collection.col中引用
HWC
- id (PRIMARY)
- stuff
- more stuff
- lots more stuff
- Year
collection
- id (PRIMARY)
- userId
- col问题:
我希望查询集合表中的特定用户,以查看它们丢失了哪些来自HWC的条目。
我甚至不知道从哪里开始逻辑,我不希望有人为我构建这个查询,但我将非常感谢指出正确的方向。
发布于 2014-08-03 16:47:30
您需要用户丢失的集合中的项。这意味着一个left outer join。特别是,您希望将所有内容保存在HWC表中,并查找缺少的内容:
select hwc.*
from hwc left join
collection c
on hwc.id = c.col
where hwc.id is null and c.user_id = @UserId;在学习SQL时,学生通常学习以下语法:
select hwc.*
from hwc
where hwc.id not in (select c.col from collection c where c.user_id = @UserId);这是非常好的SQL。有些数据库在优化not in方面做得不太好。而且,当c.col是NULL时,它可能会表现得出乎意料。由于这些原因,通常将其重写为not exists查询:
select hwc.*
from hwc
where not exists (select 1
from collection c
where c.col = hwc.id and c.user_id = @UserId
);我向您提供这些不同的选项,因为您正在学习SQL。这三者是如何工作的,值得一学。将来,您会发现这些机制(left join、not in和not exists)都很有用。
发布于 2014-08-03 16:45:25
听起来您的意思是SQL联接。
SQL教程:
假设您想查询您的集合,如下所示:
SELECT collection.userId, HWC.stuff
FROM collection
INNER JOIN HWC ON collection.col = HWC.id--这将从集合中选择userId,并从这些ID有关系的HWC中提取内容。
希望我能帮上忙祝你好运!
https://stackoverflow.com/questions/25106782
复制相似问题