SQL连接两个表以从第二个表拆分电子邮件

时间:2017-01-20 03:00:18

标签: sql join split

我有以下两张表。表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 |
----------------------------------

4 个答案:

答案 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