我在尝试执行SQLite查询以获取另一个表中不存在的记录时遇到了一些问题。基本上我有两个数据库表:
我的练习表存储了所有可用的练习,而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
然而,它给我留下了空记录。有任何想法吗?
提前致谢。
答案 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