如何解决SQL比较2个不匹配的值
我有两个表,即tableA和tableB。我需要从这些表(名称,日期和类型)中获取3列值。表A的名称和日期,表B的类型。 要从tableB获取类型,我必须将tableA的名称与tableB的值相匹配。
Query:
select distinct a.name,a.time,b.type from tableA a,tableB b where a.name=b.name
tableA:
name,date
harish,2020-07-11
Test1 - Point,2020-08-11
Test1 - Logic,2020-08-11
Test2 - Collect,2020-08-10
tableB:
name,type
harish,AB
Test1,OC
Test2,CD
select distinct a.name,tableB b
where
((a.name='Test1'+' '+'-'+' '+'Point' or a.name='Test1'+' '+'-'+' '+'Logic') = b.name)
and b.type = 'OC' and a.name LIKE 'Test1'
当我们没有完全匹配的名称时,有人可以帮助我如何匹配两个表列的值吗?
解决方法
我猜想如何匹配它们:
Processing (parallel)
v
Posting (parallel)
v
Batched Log Writes (Singular)
LIKE不在乎右边的操作数包含通配符的情况-它可以在列值本身中,以字符串常量(通常的方式)或连接在一起。最终,您似乎希望左侧的select a.name,a.time,b.type
from
tableA a
INNER JOIN tableB b ON a.name LIKE CONCAT(b.name,'%')
与右侧的Test1 - Logic
匹配,因此我们需要将正确的匹配模式设置为Test1
注意:使用Test1%
意味着如果CONCAT
是b.name
,则它将与所有内容匹配,因为CONCAT操作的结果是NULL
。如果您不希望'%'
为NULL时匹配任何内容,则放置一个排除NULL b的条件可能是最安全的(与cros-db兼容),但是如果这是SQLServer,则可以使用{{1} }代替concat; b.name
在SQLserver中导致NULL,并且没有什么像NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。