2016-06-03 4 views
0

Для MS-Access, как это сделать. Я думал о написании цикла VBA, но думаю, что это займет некоторое время.Объединение двух таблиц на основе трех столбцов

Вот две таблицы:

Таблица A

| id | Day | Month | F_value1 
--------------------------------------- 
| 1 | 10 | 11 | 523 
| 1 | 11 | 11 | 955 
| 2 | 1 | 11 | 45 
| 2 | 2 | 11 | 49 

Таблица B

| id | Day | Month | G_value1 
--------------------------------------- 
| 1 | 10 | 11 | 19923 
| 1 | 11 | 11 | 55455 
| 2 | 1 | 11 | 45454 

Что мне нужно:

| id | Day | Month | F_value1 | G_value1 
----------------------------------------------- 
| 1 | 10 | 11 | 523  | 19923  
| 1 | 11 | 11 | 955  | 55455 
| 2 | 1 | 11 | 45  | 45454 
| 2 | 2 | 11 | 49  | Null 

Я попробовал дизайнер Query Access, но мне не повезло. Я не уверен, как это сделать в SQL. У меня уже есть настройка таблицы.

Для программирования пути, я имею в виду

for each row in Table A 
for each row in Table B 
    If TableA.fields = TableB.fields 
    Then Insert it into new table 
End loop 
End loop 

ответ

0

В SQL View, это должно работать и в идеале быть быстрее, чем ваш РЕКОМЕНДУЕМЫЙ петли

SELECT a.*, b.G_Value1 
INTO TableC 
FROM TableA a 
LEFT JOIN TableB b 
ON a.ID=b.ID 
+0

ли это быть в состоянии обрабатывать случай, когда таблица А имеет некоторый идентификатор, день, месяц, которого нет в table B? В этом случае я надеюсь получить нулевые значения для полей таблицы B в таблице C. – pozza

+1

. Посмотрите это изображение для получения подробной информации о SQL-соединениях: http://i.stack.imgur.com/VQ5XP.png – Dave

2

Вам нужно несколько условий для join с. К счастью, MS Access поддерживает это LEFT JOIN:

SELECT a.id, a.Day, a.Month, a.F_value1, b.G_Value1 
FROM TableA as a LEFT JOIN 
    TableB as b 
    ON a.ID = b.ID AND a.day = b.day AND a.month = b.month; 

Вы можете использовать INSERT для вставки в существующую таблицу; INTO, чтобы создать новую таблицу. Или просто запустите запрос, чтобы получить результаты.

0

Если вам нужно полное объединение (т.е. все записи A и все записи B:

SELECT A.ID, A.Day, A.Month, A.F_value1, B.G_value1 
FROM A LEFT JOIN B ON (A.Month= B.Month) AND (A.Day= B.Day) AND (A.ID = B.ID) 
UNION 
SELECT B.ID, B.Day, B.Month, A.F_value1, B.G_value1 
FROM B LEFT JOIN A ON (B.ID = A.ID) AND (B.Day= A.Day) AND (B.Month= A.Month); 
Смежные вопросы