我有以下两张表。表A中的用户名是表B中电子邮件地址的第一部分。
如何使用拆分将两个表连接在一起?还有另一种方法吗?
这是我目前的查询:
SELECT
A.Full_name,
A.Username,
B.Email,
FROM
A
LEFT JOIN B
ON A.Username = B.Email
我想使用split(B.Email,'@') - 但我不认为这种语法是正确的。
Table A
--------------------------------
Full_name | Username |
--------------------------------
John Doe | johndoe |
--------------------------------
Jane Smith | janesmith |
--------------------------------
Table B
----------------------------------
Full_name | Email |
----------------------------------
John Doe | johndoe@yahoo.com |
----------------------------------
Jane Smith | janesmith@yahoo.com |
----------------------------------
答案 0 :(得分:2)
您可以像这样使用like
运算符:
SELECT
A.Full_name,
A.Username,
B.Email,
FROM
A
LEFT JOIN B
ON B.Email like A.Username+'@%'
在这种情况下,用户名必须与文本完全匹配,直到@
字符。
对于SQL Server:
SELECT
A.Full_name,
A.Username,
B.Email,
FROM
A
LEFT JOIN B
ON Charindex(A.Username+'@',B.Email) = 1
Charindex(A.Username+'@',B.Email) = 1
因为它必须与电子邮件的开头匹配,而不是在任何地方(如其他答案所示)。
同样,对于Oracle:
SELECT
A.Full_name,
A.Username,
B.Email,
FROM
A
LEFT JOIN B
ON INSTR(B.Email, A.Username||'@') = 1
答案 1 :(得分:1)
据我所知,mssql不支持split()函数。您可以使用left()和charindex()的组合来实现目标。
SELECT
A.Full_name,
A.Username,
B.Email
FROM
A
LEFT JOIN B
ON A.Username = left(B.Email, charindex(',', B.Email)-1)
答案 2 :(得分:1)
使用LIKE
运算符代替=
SELECT
A.Full_name,
A.Username,
B.Email,
FROM
A
LEFT JOIN B
ON B.Email like A.Username+'@%'
答案 3 :(得分:0)
为什么不加入Full_name
?
SELECT A.Full_name, A.Username, B.Email
FROM A
LEFT JOIN B
ON A.Full_name = B.Full_name