SQLite查询选择另一个表中不存在的所有记录

时间:2014-07-31 01:33:26

标签: sql sqlite

我在尝试执行SQLite查询以获取另一个表中不存在的记录时遇到了一些问题。基本上我有两个数据库表:

Database table

我的练习表存储了所有可用的练习,而scheduledExercise表存储了每个用户预订的练习。我想要做的是,例如,如果练习确实存在于scheduledExercise中,它应该被过滤掉。

以下是我使用的SQLite查询:

SELECT exercise.exerciseID, exercise.exerciseType, exercise.amout FROM exercise LEFT JOIN bookedExercise WHERE exercise.exerciseID = bookedExercise.exerciseID AND bookedExercise.exerciseID IS NULL

然而,它给我留下了空记录。有任何想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果你没有使用连接就可以了,你可以使用

SELECT * FROM exercise WHERE exerciseID not in (SELECT exerciseID FROM bookedExercise)

答案 1 :(得分:0)

您的SQL看起来没问题......我认为问题可能是您的数据类型不匹配。练习ID在一个表中是整数,在另一个表中是文本。

此外,如果您有大量数据,您可能需要考虑反加入:

select
  e.*
from
  exercise e
where not exists (
  select 1
  from bookedExercise be
  where
    e.excerciseId  = be.exerciseID
)

- 编辑 -

乍一看,你的SQL不行。你在where子句中有你的连接条件。这个小小的改动将修复你现有的SQL:

SELECT exercise.excerciseId , exercise.exerciseType , exercise.amout
FROM exercise LEFT JOIN bookedExercise on
    exercise.excerciseId  = bookedExercise.exerciseID
WHERE bookedExercise.exerciseID IS NULL

答案 2 :(得分:0)

使用LEFT JOIN时,必须将连接条件放入ON子句:

SELECT exercise.exerciseID,
       exercise.exerciseType,
       exercise.amout
FROM exercise         /* !! */
LEFT JOIN bookedExercise ON exercise.exerciseID = bookedExercise.exerciseID
WHERE bookedExercise.exerciseID IS NULL