2013-03-13 3 views
0

У меня есть две таблицы (одна маленькая, одна огромная), которые используют один и тот же уникальный ключ, но не одни и те же столбцы.MYSQL INSERT получение данных из INNER JOIN

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

Когда я запрос против него, Я использую INNER JOIN

SELECT * FROM my_bigtable AS big 
    INNER JOIN my_smalltable AS small ON big.key = small.key; 

Работает отлично. Но теперь я добавил две колонки (fname, lname) в маленькую таблицу. Большая таблица имеет эти столбцы, я хочу вывести записи в этих столбцах для отраженных ключей и поместить их в столбцы таблицы.

INSERT INTO my_smalltable AS small 
    SELECT FNAME,LNAME FROM my_bigtable AS big 
    WHERE big.FNAME = small.FNAME 
     AND big.LNAME = small.LNAME; 

Это будет только принести записи для уникальных ключей, которые существуют в небольшой таблице на маленьком столике или он принесет ВСЁ из большого стола в небольшой стол, независимо от того, уникальный ключ существует в маленький стол?

ответ

1

Try:

UPDATE small 
SET small.FNAME = big.FNAME, 
small.LNAME = big.LNAME 
FROM my_smalltable AS small 
JOIN my_bigtable AS big 
ON big.ID = small.ID 

(внутренняя) присоединиться только выбрать записи, которые существуют в небольшой таблице.

Но my_smalltable и my_bigtable действительно не должны использовать одно и то же поле ID. Каждый из них должен иметь свой первичный ключ. Вы можете использовать внешний ключ между ними. Например:

FROM my_smalltable AS small 
JOIN my_bigtable AS big 
ON big.bigID = small.bigID 

Где bigID является первичным ключом my_bigtable, но внешний ключ в my_smalltable

+0

Я думаю, что этот синтаксис оператора обновления правомочно (который имеет свой собственный первичный ключ, а my_smalltable.smallID.) в SQL Server не в MySQL –

0

Вам нужно UPDATE заявление не INSERT, попробуйте следующее:

update my_smalltable small 
INNER JOIN my_bigtable AS big ON small.key = big.key 
SET small.FNAME = big.FNAME, 
small.LNAME = big.LNAME