mysql как сравнить 2 таблицы с несколькими столбцами - PullRequest
0 голосов
/ 27 ноября 2018

В настоящее время я пытаюсь сравнить несколько столбцов, таких как деталь, количество и тип, с другой таблицей. Я попытался сравнить идентификатор детали без проблем, но когда я хочу сравнить идентификатор детали с количеством, это вызовет ошибку, такую ​​как ничего не возвращать.

приведенная ниже кодировка предназначена только для сравнения идентификатора детали.

   INSERT INTO `table3` 
SELECT *
FROM   table1
WHERE  NOT EXISTS (SELECT *
                   FROM   table2
                   WHERE  table2.part = table1.part)"

, как я могу сравнить детали и количество вместе, чтобы найти непревзойденную запись.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Не уверен, что это лучший подход, но я бы соблазнился попробовать нулевое левое соединение либо с набором значений, либо с конкатенацией - например,

select t1.*
from mytable1 as t1
left join mytable2 as t2 on t1.foo = t2.foo and t1.bar = t2.bar
where t1.id is null;

Единственное, на что следует обратить вниманиев том, что t1.id (и t2.id) предполагаются первичными ключами - т.е. никогда не могут быть нулевыми.Конечным результатом вышеприведенного должно быть все строки в t1, которые нельзя объединить со строкой в ​​t2.

0 голосов
/ 27 ноября 2018

Удобный метод в MySQL - это in с кортежами:

INSERT INTO `table3` ( . . . )
    SELECT . . .
    FROM table1
    WHERE (part, quantity) NOT IN (SELECT part, quantity FROM table2);

Что более важно, вы должны явно перечислить все столбцы при использовании insert.Это помогает предотвратить непредвиденные проблемы при вставке данных.

0 голосов
/ 27 ноября 2018

Есть 2 решения -

1)

 INSERT INTO `table3` 
    SELECT *
    FROM   table1
    WHERE  NOT EXISTS (SELECT *
                       FROM   table2
                       WHERE  table2.part = table1.part And table2.quantity=table1.quantity)

2)

INSERT INTO table2 (part, quantity, type)
SELECT part, quantity, type
FROM table1
ON DUPLICATE KEY UPDATE quantity= VALUES(quantity), type= VALUES(type)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...