请让我知道以下有什么问题:(不返回任何行)
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 )
请让我知道以下有什么问题:(不返回任何行)
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 )
为此,您需要连接语法。据推测,您正在尝试查找其学期与表中的任何学期都不相同的课程。首先找到匹配的,然后使用以下方法过滤掉它们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
)
它们是两个不同的查询,尽管它们都很奇怪。我怀疑每个班级都有一个学期。如果您有适当的外键约束,sem
最多可以是null
,在这种情况下,您的查询将变为:
select *
from class
where sem is null
但是第二个查询应该可以工作,并且应该返回所有具有sem
不在表中的值的类semester
。
但是,第一个查询将在semester
. 此外,它对(假定的)数字字段进行字符串比较。总而言之,第一个查询没有意义。