Sql 我可以在WHERE子句中使用大小写表达式吗?

Sql 我可以在WHERE子句中使用大小写表达式吗?,sql,sql-server,Sql,Sql Server,我不知道如何在sql中编写查询。 这就是我迄今为止所尝试的 where case when a.book_id like 'AB%' then a.book_id = b.school_id, --1 when a.book_id like 'CB%' then a.book_id = b.college_id. --2 end 案例1和案例2说明。 1-我相信这是好的。 2-当a.book以字母CB开头时,例如CBQ123然后只取Q123

我不知道如何在sql中编写查询。
这就是我迄今为止所尝试的

where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end

案例1和案例2说明。

1-我相信这是好的。
2-当
a.book
以字母CB开头时,例如
CBQ123
然后只取
Q123
=
b.college\u id


b.学院标识前面没有CB

编辑以添加示例

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a and FinishedStudent b
where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end
   when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id.  --2

如果a.book=CBQ111,那么Q111在FinishedStudent表中,而不是CBQ11,所以我只需要比较最后3个字符

使用案例2示例进行编辑

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a and FinishedStudent b
where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end
   when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id.  --2

只是一个小的语法问题。在T-SQL中,
CASE
是一个返回值的表达式,因此您需要将输出与其他语言(如VB)中的流语句控件进行比较

where a.book_id = case 
       when a.book_id like 'AB%' then b.school_id    --1   
       when a.book_id like 'CB%' then b.college_id   --2
  end
根据评论中添加的单词问题的混乱程度,也许你真正想要的是:

WHERE (a.book_id LIKE 'AB%' AND a.book_id = b.school_id)
   OR (a.book_id LIKE 'CB%' AND SUBSTRING(a.book_id, 3, 255) = b.college_id)

还有其他方法可以写入最后一行,但如果book_id有索引,则LIKE筛选器可能仍然有用。

编辑:更正问题并清理代码

你可以把它放在WHERE子句中,但我更喜欢放在join中

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a
  join FinishedStudent b on a.book_id = 
    case 
       when a.book_id like 'AB%' then b.school_id,   --1   
       when a.book_id like 'CB%' then b.college_id.  --2
    end

请提供示例数据和示例结果集,如中所示。在标题中指定SQL Server,但在标记中指定MySQL和Oracle。您能否澄清您使用的是哪种产品?为什么您不能在查询的
select
部分执行相同的操作?为什么book\u id始终等于school\u id或college\u id?我在这里看到了严重的数据模型问题。还有,为什么它同时被标记为SQL Server和Oracle?两个平台的语法可能会不同。请显示示例数据和期望的结果,包括当a.book_id与AB或CB不同时希望发生的情况。如果a.book=CBQ111,则Q111位于FinishedStudent表中,而不是CBQ11,因此我只需比较最后3个字符。这对我来说似乎不正确;它看起来像一个布尔表达式。您需要将输出与其他内容进行比较。谢谢,这是一个输入错误。我仔细研究了一下,并做了一些编辑。我写了同样的答案,然后我问自己:这里不需要
ELSE
?如果
a.book\u id
与这些条件中的任何一个都不匹配怎么办?@bfavaretto则不会返回该行。我们只能使用所提供的信息。那么您的意思是
CASE
在这种情况下会返回
NULL
或类似的结果?这是有道理的。对,并且a.book_id=NULL将返回unknown,无论出于何种目的,它都等同于false,这意味着放弃该行。@AaronBertrand感谢您修复语法,但这是真正的问题。如果
a.book
=CBQ111,那么Q111在FinishedStudent表中,而不是CBQ11,所以我只需要比较最后3个字符。