2013-09-20 1 views
0

У меня есть один col (state_not_allowed) в TABLE vendor_product, где я пытаюсь вставить значения от product_catalog_varchar.value - но только если есть ы в vendor_product, что соответствует SKU в product_catalog, где идентификатор product_catalog равняется идентификатор product_catalog_varchar в и идентификатор атрибута product_catalog_varchar в = 523.MySQL INSERT В одном столбце из запроса SELECT, извлекающего данные из двух других таблиц - бросание # 1062 - Повторяющаяся запись '' для ошибки ключа 2

Я в основном пытаются сделать эквивалент MySQL в качестве Excel VLOOPUP. Мне нужен результат следующего запроса:

SELECT product_catalog_varchar.value 
FROM product_catalog_varchar 
JOIN product_catalog 
ON product_catalog.id = product_catalog_varchar.id 
JOIN vendor_product 
ON vendor_product.sku = product_catalog.sku 
AND product_catalog_varchar.attribute_id = 523 

Чтобы быть вставлены в колонку state_not_allowed, где в ы vendor_product = единицы складского хранения в product_catalog.

Я провел некоторое исследование на INSERT INTO, здесь и на Google в целом. Похоже, что большая часть инструкций есть на более простых запросах, поэтому я не смог найти достойную модель, чтобы выяснить, что делать. Я могу вам сказать, что этот запрос не работает:

INSERT INTO vendor_product(`state_not_allowed`) 
SELECT product_catalog_varchar.value 
FROM product_catalog_varchar 
JOIN product_catalog 
ON product_catalog.id = product_catalog_varchar.id 
JOIN vendor_product 
ON vendor_product.sku = product_catalog.sku 
AND product_catalog_varchar.attribute_id = 523 

Он выдает следующее сообщение об ошибке: # 1062 - Дублировать запись «» для ключа 2

И если я должен vendor_product и посмотреть, а просто вставляя значения в state_not_allowed, он создает целую новую строку (без данных). Понятно, что я в этом смысле не понимаю. Выручи меня? Спасибо, ребята.

+1

Почему у вас есть этот 'product_catalog.id = product_catalog_varchar.id' в разделе WHERE, если вы одинаковы для первого JOIN? – user2065377

+0

Хороший вопрос. Я был отвлечен при написании запроса, я думаю. Хороший улов. – Kale

ответ

0

Этот запрос показывает общее представление о том, что вы хотите сделать.

insert into table2 
(field1) 
select distinct field1 
from table1 
where field1 in 
(select field1 
from table1 
except 
select field1 
from table2) 

Данные варьируются от СУРБД к РСУБД. Например, Oracle использует ключевое слово минус вместо исключения. Ваша документация MySql поможет вам в деталях.

Обратите внимание, что хотя это заманчиво упростить это, используя «не в», конструкция имеет тенденцию быть медленной.

+0

Я следую вашему запросу здесь, но я немного смущен относительно того, где здесь я бы перекрестно ссылался на skus, чтобы убедиться, что значения в vendor_product (или в вашем примере table2) были присвоены правильные строки. – Kale

+0

В этом примере показано, как вставлять строки, если у вас их уже нет. Проверка точности данных - это другой вопрос. Возможно, добавление дополнительных условий в предложение where сделает трюк. Возможно, добавление предложения where в верхнюю половину подзапроса даст вам то, что вам нужно. Вы тот, кто знает вашу базу данных, а не я. –

 Смежные вопросы

  • Нет связанных вопросов^_^