MySQL查询并比较两个不同的表

时间:2014-08-03 16:38:02

标签: mysql sql

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

我有2个数据库表HWCcollectionHWC.id中引用了collection.col

HWC
- id (PRIMARY)
- stuff
- more stuff
- lots more stuff
- Year

collection
- id (PRIMARY)
- userId
- col

问题:

我想查询特定用户的集合表,以查看他们遗失的HWC条目。

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

2 个答案:

答案 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.colNULL时,它可能会出现意外行为。出于这些原因,这通常被重写为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 joinnot innot 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具有关系的东西。

希望我帮助,祝你好运!