如何解决具有不同数据类型SQL的内部联接
我有一些表,我们称它们为表GroupMember
ID GroupID Username
1 1 Frey
2 2 Anne
3 2 Bryan
4 3 Belle
5 3 Will
6 4 Drio
7 5 Maxio
8 5 James
这是表Mailbox
ID FromUser ToUser Message Approval
1 Belle Client Hello Group 2
2 Anne Client Hai Group 1
3 Maxio Client Hii Group 4
4 Drio Client hey Group 1
我要select * from Mailbox where (GroupID=1)
因此,if GroupID=1
将显示以下结果:
ID FromUser ToUser Message Approval
2 Anne Client Hai Group 1
4 Drio Client hey Group 1
问题是GroupID
的数据类型为INT,Approval
的数据类型为NVARCHAR。我该怎么解决?
解决方法
您可以使用String functions
。考虑到“批准”字段由“组” +数字组成,您可以Replace
'Group'和Cast
字符串为数字
使用加入:
SELECT * FROM Mailbox
JOIN GroupMember
ON CAST(REPLACE(Mailbox.Approval,'Group ','')AS INT)=GroupID
WHERE GroupID=1
不加入(从具有GroupId = 1的邮箱中获取数据):
SELECT * FROM Mailbox WHERE CAST(REPLACE(Mailbox.Approval,'')AS INT)=1
或使用Concat :
SELECT * FROM Mailbox
JOIN GroupMember
ON Mailbox.Approval=CONCAT('Group ',GroupMember.GroupID)
WHERE GroupID=1
,
类似这样的东西:
select *
from Mailbox m
inner join GroupMember g on g.GroupID = cast(right(m.Approval,1) as int)
where m.Approval = 'Group 1'
,
您不能使用GroupId列从Mailbox中进行选择,因为该表没有该列,但是即使您只想使用数字来选择,也可以使用LIKE语句
SELECT *
FROM Mailbox
WHERE Approval LIKE 'Group ' + @id
此外,如果要联接表,可以用相同的方法进行
SELECT *
FROM Mailbox AS M
JOIN GroupMember G ON M.Approval LIKE 'Group ' + G.GroupID
我建议您使用其他方式将值连接到LIKE语句,例如CONCAT函数。但是使用+运算符可以在大多数SQL引擎和版本中使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。