ОБНОВЛЕНИЕ: ОК, теперь я думаю, что я теперь, что вы пытаетесь сделать.Вы хотите, чтобы каждая строка в первой таблице соответствовала не более чем одной строке во второй таблице.Если вы используете MS SQL, Oracle или PostgreSQL, то вы можете использовать ROW_NUMBER для унификации ваших строк:
SELECT Field1 AS newfield, Field2, field4
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS rn
FROM Table1) AS T1
JOIN (SELECT *, ROW_NUMBER() OVER (PARTITION BY field3 ORDER BY field4) AS rn
FROM Table2) AS T2
ON T1.Field1 = T2.field3 AND T1.rn = T2.rn
ORDER BY Field1
Результат:
'AA', 20, 20
'AA', 20, 20
'AC', 13, 13
Если вы используете MySQL, вы можете имитировать ROW_NUMBER, используяпеременные:
SELECT Field1 AS newfield, Field2, field4
FROM
(SELECT
Field1,
Field2,
@rn := CASE WHEN @last = Field1 THEN @rn + 1 ELSE 1 END AS rn,
@last := Field1
FROM Table1, (SELECT @rn := 0, @last = NULL) AS vars
ORDER BY Field1) AS T1
JOIN
(SELECT
Field3,
Field4,
@rn := CASE WHEN @last = Field3 THEN @rn + 1 ELSE 1 END AS rn,
@last := Field3
FROM Table2, (SELECT @rn := 0, @last = NULL) AS vars
ORDER BY Field3) AS T2
ON T1.Field1 = T2.field3 AND T1.rn = T2.rn
ORDER BY Field1
Результат:
'AA', 20, 20
'AA', 20, 20
'AC', 13, 13