不在和不喜欢

时间:2012-12-27 16:33:54

标签: mysql

请告诉我以下内容的错误:(没有返回行)

 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 )

2 个答案:

答案 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中有多个记录,第一个查询就会失败。此外,它在(假设)数字字段上进行字符串比较。总而言之,第一个查询没有意义。