首先,我想说的是,在提出这个问题之前,我已经花了我应有的时间和勤奋,通过观看视频,使用其他来源,阅读其他帖子和soff的答案,但仍然无法找到解决方案。
我遇到的问题,在一个特定的情况下,是一个特定的类型正在传递,这将需要使用LIKE作为特定类型本身将不匹配任何东西,因为三种类型使用一种类型,在这种情况下说"绘画"。数据库中有"画小"one_answers"画大"。
代码// I tried this
CASE WHEN type = 'painting' THEN inventory.type LIKE '%'+type+'%' ELSE inventory.type = type END
我一直遇到"在期望条件的上下文中指定的非布尔类型的表达式。还有一些其他的变化,我已经尝试以及IF ELSE,然而,我遇到了同样的问题。别人也许能把这个问题说得更好。
我主要是想被指出正确的方向,并得到澄清我做错了什么。
谢谢
您的查询有几个问题。而不是CASE
表达式本身,我将解决不太明显的问题,您缺少前缀。以这个子句为例:
inventory.type LIKE '%'+type+'%'
这可能是由于列名不明确而导致的错误,或者解析为inventory.type LIKE '%'+inventory.type+'%'
;显然,后者总是为真,除非列type
的值为NULL
。总是在列名前加上前缀,特别是当您的查询包含2个以上的表时。
对于实际问题,这可能是WHERE
的一部分,因此使用OR
和AND
逻辑:
WHERE (({Other Table Prefix}.[type] = 'painting' AND inventory.[type] LIKE '%' + {Other Table Prefix}.[Type] + '%')
OR ({Other Table Prefix}.[type] != 'painting' AND inventory.[type] = {Other Table Prefix}.[Type]))
显然,您需要用正确的前缀适当地替换{Other Table Prefix}
。
问题似乎出在
LIKE '%'+type+'%'
LIKE可以返回一个布尔值。