我不确定如何在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_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
如果a.book = CBQ111,那么Q111在FinishedStudent表中而不是CBQ11,所以我需要比较最后3个字符。
使用案例2示例编辑
when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id. --2
答案 0 :(得分:6)
只是一个小的语法问题。在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过滤器可能仍然有用。
答案 1 :(得分:0)
编辑:纠正问题并清理代码。
您可以将它放在WHERE子句中,但我更喜欢将它放在连接中。
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