2017-01-20 40 views
3

我有兩個下面的表。其中表A的用戶名是表B中電子郵件地址的第一部分。SQL加入兩個表來拆分第二個表中的電子郵件

如何使用split將兩個表連接在一起?有沒有另一種方法來做到這一點?

這是我當前的查詢:

SELECT 
    A.Full_name, 
    A.Username, 
    B.Email, 
    FROM 
    A 
    LEFT JOIN B 
    ON A.Username = B.Email 

我想用分割(B.Email,「@」) - 但是我不認爲這句法是正確的。

Table A 
-------------------------------- 
Full_name | Username   | 
-------------------------------- 
John Doe | johndoe   | 
-------------------------------- 
Jane Smith | janesmith   | 
-------------------------------- 



Table B 
---------------------------------- 
Full_name | Email    | 
---------------------------------- 
John Doe | [email protected] | 
---------------------------------- 
Jane Smith | [email protected] | 
---------------------------------- 
+0

你用什麼RDBMS? –

回答

0

你爲什麼不加入Full_name

SELECT A.Full_name, A.Username, B.Email 
FROM A 
LEFT JOIN B 
ON A.Full_name = B.Full_name 
+0

由於全名不匹配 –

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) 
1

使用LIKE操盤=

SELECT 
    A.Full_name, 
    A.Username, 
    B.Email, 
    FROM 
    A 
    LEFT JOIN B 
    ON B.Email like A.Username+'@%' 
+0

LIKE謂詞中的第一個「%」符號可能不是必需的,它也可能會阻止索引範圍掃描。 – TechEnthusiast

+0

@TechEnthusiast - 是不需要 –

+0

不需要?這完全是錯誤的。你的第二個解決方案仍然不正確 – GurV

3

您可以使用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,因爲它必須從電子郵件的起點,不匹配的任何地方(如對方回答提示)。

同樣,對於甲骨文:

SELECT 
A.Full_name, 
A.Username, 
B.Email, 
FROM 
A 
LEFT JOIN B 
ON INSTR(B.Email, A.Username||'@') = 1 
+0

從「A.Username」中刪除空間還是不相關? – Prisoner

+0

@ ToomanyAlex用戶名中沒有空格。 – GurV

+0

對不起,我忽略^^「 – Prisoner

相關問題