2017-01-20 3 views
3

Ich habe die beiden folgenden Tabellen. Der Benutzername aus Tabelle A ist der erste Teil der E-Mail-Adresse in Tabelle B.SQL Join zwei Tabellen, um E-Mails von der zweiten Tabelle zu trennen

Wie verknüpfe ich die beiden Tabellen mithilfe von split? Gibt es einen anderen Weg, dies zu tun?

Dies ist meine aktuelle Abfrage:

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

Ich mag würde Split verwenden (B.Email, '@') - aber ich glaube nicht, dass diese Syntax korrekt ist.

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

Welche RDBMS verwenden Sie? –

Antwort

0

Warum treten Sie nicht auf Full_name?

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

Da der vollständige Name möglicherweise nicht übereinstimmt –

1

Soweit ich weiß, unterstützt mssql keine split() - Funktion. Sie können eine Kombination aus left() und charindex() verwenden, um Ihr Ziel zu erreichen.

SELECT 
A.Full_name, 
A.Username, 
B.Email 
FROM 
A 
LEFT JOIN B 
ON A.Username = left(B.Email, charindex(',', B.Email)-1) 
1

Verwenden LIKE Operator statt =

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

Das erste "%" - Symbol im Prädikat LIKE ist möglicherweise nicht erforderlich und kann auch den Indexbereichscan verhindern. – TechEnthusiast

+0

@TechEnthusiast - Ja nicht benötigt –

+0

Nicht benötigt? Es war völlig falsch. Ihre zweite Lösung ist immer noch falsch. – GurV

3

Sie like Operator wie folgt verwenden können:

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

In diesem Fall wird der Benutzername genau nur bis mit dem Text übereinstimmen das @ Zeichen.

Für 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, weil sie von dem Start der E-Mail, nicht überall (wie die andere Antwort vorschlagen) müssen übereinstimmen.

Auch für Oracle:

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

Wird es besser sein, den Platz von 'A.Username' zu ​​entfernen oder nur irrelevant? – Prisoner

+0

@ToomanyAlex Es gibt keinen Platz in Benutzername. – GurV

+0

Entschuldigung für meinen overlook ^^ " – Prisoner

Verwandte Themen