请告诉我以下内容的错误:(没有返回行)
Select *
from class
where sem NOT LIKE concat('%',(Select sem_id from semester ),'%')
我问这个原因以下技巧工作正常:(返回8行)
Select *
from class
where sem NOT IN (Select sem_id from semester )
答案 0 :(得分:2)
您需要加入语法。据推测,您正在尝试查找其学期与表格中的任何学期不同的课程。首先找到匹配的匹配项,然后使用having
Select c.*
from class c left outer join
semester s
on c.sem like concat('%', s.sem_id, '%')
group by c.class_id
having max(s.sem_id) is null -- there are no matching semesters
您可以通过编写如下查询来消除group by
:
Select c.*
from class
where not exists (select s.sem_id
from semester s
where class.sem like ('%', s.sem_id, '%')
limit 1
)
答案 1 :(得分:0)
它们是两个不同的查询,尽管它们都是奇怪的。我怀疑每个班级都有一个学期。如果您有适当的外键约束,sem
最多只能null
,在这种情况下您的查询将成为:
select *
from class
where sem is null
但第二个查询应该有效,并且应该返回sem
中值不在表semester
中的所有类。
然而,只要semester
中有多个记录,第一个查询就会失败。此外,它在(假设)数字字段上进行字符串比较。总而言之,第一个查询没有意义。