MySQL дубликат на вставке

0

Первая таблица

  $sql = "CREATE TABLE if not exists mainInfo (
sku varchar(20) primary key not null,
name varchar(20) not null,
price int(30) not null,
type int(2) not null
)";

Вторая таблица

$sql="CREATE TABLE if NOT EXISTS properties (
size int(9),
bWeight int(9),
fHeight int(9),
fWeight int(9),
fLenght int(9),
sku varchar(20) not null,
CONSTRAINT FK_mainInfoProperties FOREIGN KEY (sku) REFERENCES mainInfo(sku)
)";

Внутренняя таблица соединений

      $sql = "CREATE TABLE if NOT EXISTS allInfo (
        sku varchar(20) primary key not null,
        name varchar(20) not null,
        price int(30) not null,
        type int(2) not null,
        size int(9),
        bWeight int(9),
        fHeight int(9),
        fWeight int(9),
        fLenght int(9)
         )";

       $sql = "INSERT INTO allInfo (sku, name, price, type, size, bWeight, 
       fHeight, fWeight, fLenght)
        SELECT mainInfo.sku, name, price, type, size, bWeight, fHeight, 
       fWeight, fLenght
        FROM mainInfo INNER JOIN properties
        ON mainInfo.sku = properties.sku";

В первый раз я использую этот код, он работает, но когда я добавляю новые строки в первую и вторую таблицы, таблица внутреннего соединения не обновляет его, предоставляя мне повторяющуюся запись для ключа "PRIMARY", как я могу обновить эту таблицу, добавив новые строки, но оставив те, которые уже там нетронутые?

  • 0
    У вас есть sku в качестве первичного ключа, что означает, что может существовать только одна строка с определенным sku (они должны быть уникальными). Таблица properties вероятно, содержит несколько строк с одним и тем же sku. Вы действительно хотите, чтобы allInfo имел sku качестве первичного ключа?
Теги:
inner-join
insert-update

2 ответа

0
Лучший ответ

Mark Suk Field в allInfo как внешний ключ и добавьте новый первичный ключ, такой как allInfoId, чтобы однозначно идентифицировать запись

  • 0
    сделал это, но теперь, когда я добавляю новую информацию, предыдущая дублируется в базе данных. Как: если я добавлю entry_1, а последний entry_2, он будет отображаться как entry_1 entry_1 entry_2
  • 0
    думал, может быть, я мог бы сбросить таблицу каждый раз, прежде чем добавлять новую информацию?
0

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

Select m.sku ,a.bWeight, a.fHeight, a.fWeight , a.fLenght from mainfon join properties a on m.sku=a.suk where a.suk=your_id

Я предложил два использовать только две таблицы, не использовать вторую

Ещё вопросы

Сообщество Overcoder
Наверх
Меню