2017-01-20 10 views
3

次の2つのテーブルがあります。テーブルAのユーザ名は、テーブルBのメールアドレスの最初の部分です。SQLは2つのテーブルを結合して2番目のテーブルからメールを分割します

スプリットを使用して2つのテーブルを結合するにはどうすればよいですか?これを行う別の方法がありますか?

これは私の現在のクエリです:私はスプリットを使用したい

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

? –

答えて

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 B.Email like A.Username+'@%' 
1

使用LIKEオペレータあなたはこのよう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の同様

、:

あなたはどのようなRDBMSを使うのですか
SELECT 
A.Full_name, 
A.Username, 
B.Email, 
FROM 
A 
LEFT JOIN B 
ON INSTR(B.Email, A.Username||'@') = 1 
+0

LIKE述語の最初の "%"記号は必要でなく、インデックス範囲のスキャンを妨げる可能性があります。 – TechEnthusiast

+0

@TechEnthusiast - そうは必要ありません –

+0

不要ですか?それはまったく間違っていた。 2番目の解決策はまだ間違っています。 – GurV

3

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

「A.Username」からスペースを削除する方が良いでしょうか、それとも無関係でしょうか? – Prisoner

+0

@ToomanyAlexユーザー名にスペースはありません。 – GurV

+0

私の見落としに申し訳ありません^^ " – Prisoner

関連する問題