我对SQL查询很新,所以如果这是一个非常简单的问题,请原谅我。
我有2个数据库表HWC
和collection
,HWC.id
中引用了collection.col
HWC
- id (PRIMARY)
- stuff
- more stuff
- lots more stuff
- Year
collection
- id (PRIMARY)
- userId
- col
我想查询特定用户的集合表,以查看他们遗失的HWC
条目。
我甚至不知道从逻辑上开始,我不希望有人为我构建查询,但是非常感谢我指向正确的方向。
答案 0 :(得分:3)
您希望收集的用户缺少的项目。这表明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
)都很有用。
答案 1 :(得分:0)
听起来你的意思是SQL JOINS。
<强> SQL Joins Tutorial: 强>
让我们说你想要像这样查询你的收藏:
SELECT collection.userId, HWC.stuff
FROM collection
INNER JOIN HWC ON collection.col = HWC.id
这将从集合中选择userId,从HWC中选择这些ID具有关系的东西。
希望我帮助,祝你好运!