具有不同数据类型SQL的内部联接

时间:2020-08-31 20:20:56

标签: sql sql-server inner-join

我有一些表,我们称它们为表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。我该怎么解决?

3 个答案:

答案 0 :(得分:1)

您可以使用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,'Group ','')AS INT)=1

或使用Concat

 SELECT * FROM Mailbox
 JOIN GroupMember
 ON Mailbox.Approval=CONCAT('Group ',GroupMember.GroupID)
 WHERE GroupID=1

答案 1 :(得分:0)

类似这样的东西:

select *
from Mailbox m
inner join GroupMember g on g.GroupID = cast(right(m.Approval, 1) as int)
where m.Approval = 'Group 1'

答案 2 :(得分:0)

您不能使用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引擎和版本中使用。

相关问题