Поскольку с MS-ACCESS, решение становится все более сложным.
Кроме того, чтобы правильно обрабатывать NULL, добавляется больше фильтров. Для NULL, NULL строки, он не будет вставлен в TableA, тогда как xx, NULL будет вставлен.
Для краткости требуется INSERT INTO ... SELECT заявление, как:
INSERT INTO TableA(Company_Number, Company_Name)
SELECT
DISTINCT Company_Number, Company_Name
FROM
TableB
WHERE NOT EXISTS
(SELECT
1
FROM
TableA
WHERE
(TableA.Company_Number=TableB.Company_Number OR (TableA.Company_Number IS NULL AND TableB.Company_Number IS NULL)) AND
(TableA.Company_Name=TableB.Company_Name OR (TableA.Company_Name IS NULL AND TableB.Company_Name IS NULL)) AND
NOT (TableB.Company_Number IS NULL AND TableB.Company_Name IS NULL));
Полный демо прилагается (у меня нет условий для MS-ACCESS, и это выполняется в MySQL 5.7). ,
SQL:
create table TableA(ID_Number int auto_increment primary key, Company_Number int, Company_Name varchar(200));
create table TableB(Company_Number int, Company_Name varchar(200));
insert into TableA(Company_Number, Company_Name) values
(1,'A'),
(2,'B');
insert into TableB(Company_Number, Company_Name) values
(2,'B'),
(3,'C'),
(4,NULL),
(NULL,'D');
SELECT * FROM TableA;
SELECT * FROM TableB;
INSERT INTO TableA(Company_Number, Company_Name)
SELECT
DISTINCT Company_Number, Company_Name
FROM
TableB
WHERE NOT EXISTS
(SELECT
1
FROM
TableA
WHERE
(TableA.Company_Number=TableB.Company_Number OR (TableA.Company_Number IS NULL AND TableB.Company_Number IS NULL)) AND
(TableA.Company_Name=TableB.Company_Name OR (TableA.Company_Name IS NULL AND TableB.Company_Name IS NULL)) AND
NOT (TableB.Company_Number IS NULL AND TableB.Company_Name IS NULL));
SELECT * FROM TableA;
INSERT INTO TableA(Company_Number, Company_Name)
SELECT
DISTINCT Company_Number, Company_Name
FROM
TableB
WHERE NOT EXISTS
(SELECT
1
FROM
TableA
WHERE
(TableA.Company_Number=TableB.Company_Number OR (TableA.Company_Number IS NULL AND TableB.Company_Number IS NULL)) AND
(TableA.Company_Name=TableB.Company_Name OR (TableA.Company_Name IS NULL AND TableB.Company_Name IS NULL)) AND
NOT (TableB.Company_Number IS NULL AND TableB.Company_Name IS NULL));
SELECT * FROM TableA;
Выход:
mysql> SELECT * FROM TableA;
+-----------+----------------+--------------+
| ID_Number | Company_Number | Company_Name |
+-----------+----------------+--------------+
| 1 | 1 | A |
| 2 | 2 | B |
+-----------+----------------+--------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM TableB;
+----------------+--------------+
| Company_Number | Company_Name |
+----------------+--------------+
| 2 | B |
| 3 | C |
| 4 | NULL |
| NULL | D |
+----------------+--------------+
4 rows in set (0.00 sec)
mysql> INSERT INTO TableA(Company_Number, Company_Name)
-> SELECT
-> DISTINCT Company_Number, Company_Name
-> FROM
-> TableB
-> WHERE NOT EXISTS
-> (SELECT
-> 1
-> FROM
-> TableA
-> WHERE
-> (TableA.Company_Number=TableB.Company_Number OR (TableA.Company_Number IS NULL AND TableB.Company_Number IS NULL)) AND
-> (TableA.Company_Name=TableB.Company_Name OR (TableA.Company_Name IS NULL AND TableB.Company_Name IS NULL)) AND
-> NOT (TableB.Company_Number IS NULL AND TableB.Company_Name IS NULL));
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM TableA;
+-----------+----------------+--------------+
| ID_Number | Company_Number | Company_Name |
+-----------+----------------+--------------+
| 1 | 1 | A |
| 2 | 2 | B |
| 3 | 3 | C |
| 4 | 4 | NULL |
| 5 | NULL | D |
+-----------+----------------+--------------+
5 rows in set (0.00 sec)
mysql>
mysql> INSERT INTO TableA(Company_Number, Company_Name)
-> SELECT
-> DISTINCT Company_Number, Company_Name
-> FROM
-> TableB
-> WHERE NOT EXISTS
-> (SELECT
-> 1
-> FROM
-> TableA
-> WHERE
-> (TableA.Company_Number=TableB.Company_Number OR (TableA.Company_Number IS NULL AND TableB.Company_Number IS NULL)) AND
-> (TableA.Company_Name=TableB.Company_Name OR (TableA.Company_Name IS NULL AND TableB.Company_Name IS NULL)) AND
-> NOT (TableB.Company_Number IS NULL AND TableB.Company_Name IS NULL));
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM TableA;
+-----------+----------------+--------------+
| ID_Number | Company_Number | Company_Name |
+-----------+----------------+--------------+
| 1 | 1 | A |
| 2 | 2 | B |
| 3 | 3 | C |
| 4 | 4 | NULL |
| 5 | NULL | D |
+-----------+----------------+--------------+
5 rows in set (0.00 sec)
'NOT EXISTS' должен содержать инструкцию' SELECT'. –
Исправления языков, переформатированный код – maxhb
У вас есть первичный ключ в tableA? –