我不知道如何在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
Run Code Online (Sandbox Code Playgroud)
案例1和2解释.
1-我相信是好的.
2- a.book以字母CB开头,CBQ123然后只需取Q123= b.college_id.
b.college_id前面没有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
Run Code Online (Sandbox Code Playgroud)
如果a.book = CBQ111那么Q111在FinishedStudent表中而不是CBQ11,所以我需要比较最后3个字符.
用案例2编辑
when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id. --2
Run Code Online (Sandbox Code Playgroud)
只是一个小的语法问题.在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
Run Code Online (Sandbox Code Playgroud)
基于评论中添加的单词问题的扰乱,也许你真正追求的是:
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)
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以编写最后一行,但如果book_id有索引,则LIKE过滤器可能仍然有用.