1

请让我知道以下有什么问题:(不返回任何行)

 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 )
4

2 回答 2

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
                  )
于 2012-12-27T16:44:56.423 回答
0

它们是两个不同的查询,尽管它们都很奇怪。我怀疑每个班级都有一个学期。如果您有适当的外键约束,sem最多可以是null,在这种情况下,您的查询将变为:

select * 
from class 
where sem is null

但是第二个查询应该可以工作,并且应该返回所有具有sem不在表中的值的类semester

但是,第一个查询将在semester. 此外,它对(假定的)数字字段进行字符串比较。总而言之,第一个查询没有意义。

于 2012-12-27T16:43:05.473 回答