2017-05-19 13 views
0

表1MySQLは2つのテーブルをジョイン順次

=================== 
id name 
------------------- 
1  m 
2  m 
3  a 
4  u 
5  g 

表2

=================== 
id name 
------------------- 
8  m 
9  m 
10 u 
11 a 
12 x 
15 m 

I名前で表1に関連付けられた表2からのIDを見つける必要があります。しかし、表2のIDは異なる必要があります。

私が参加作る場合、私は間違った交差点を受け取る:

select t1.id as i1, t1.name, t2.id as i2 from t1 
join t2 on t1.name = t2.name 



i1 name i2 
-------------------- 
'1','m','8' 
'2','m','8' 
'1','m','9' 
'2','m','9' 
'4','u','10' 
'3','a','11' 
'1','m','15' 
'2','m','15' 

は、私は別のシステムからのテーブルの同期のためにこれを必要とします。

答えて

2

次のクエリを使用することができます。

SELECT t1.id, t1.name, t2.id 
FROM (
    SELECT id, name, 
      @rn1 := IF(@n = name, @rn1 + 1, 
        IF(@n := name, 1, 1)) AS rn1 
    FROM Table1 
    CROSS JOIN (SELECT @rn1 := 0, @n := '') AS vars 
    ORDER BY name, id) AS t1 
INNER JOIN (
    SELECT id, name, 
      @rn2 := IF(@n = name, @rn2 + 1, 
        IF(@n := name, 1, 1)) AS rn2 
    FROM Table2 
    CROSS JOIN (SELECT @rn2 := 0, @n := '') AS vars 
    ORDER BY name, id 
) AS t2 ON t1.name = t2.name AND t1.rn1 = t2.rn2 
ORDER BY t1.id 

クエリは現在使用できませんMySQLでROW_NUMBER()窓関数を、シミュレートするために変数を使用しています。変数@rn1,と同じnameパーティションに属するレコードを列挙し、順序はidフィールドで決定します。

Demo here

+0

ありがとうございました!あなたは元気です! –

関連する問題