Можете ли вы использовать INNER JOIN с первичным ключом? - PullRequest
4 голосов
/ 14 февраля 2012

У меня есть две таблицы с отношением один к одному.Таблица1 имеет составной первичный ключ, состоящий примерно из 4 столбцов.Внешний ключ таблицы 2 установлен на первичный ключ таблицы 1.

Когда я пытаюсь выполнить следующее предложение UPDATE, я получаю сообщение об ошибке:

UPDATE Table2
SET column1 = fakeTable.c1
FROM Table2 INNER JOIN
    (
        SELECT Table1.primaryKey
        , (Table1.column3 + Table1.column4) AS c1
        FROM Table1
    ) AS c1
ON Table2.foreignKey = fakeTable.primaryKey

Разрешено ли ссылаться на ключи, как если бы они былистолбцы?

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

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

UPDATE
  Table2
SET
  column1 = Table1.column3 + Table1.column4
FROM
  Table2
INNER JOIN
  Table1
    ON  Table2.foreignKey1 = Table1.primaryKey1
    AND Table2.foreignKey2 = Table1.primaryKey2
    AND Table2.foreignKey3 = Table1.primaryKey3
    AND Table2.foreignKey4 = Table1.primaryKey4

РЕДАКТИРОВАТЬ

Ответ на комментарий:
- I thought the whole point of keys was to avoid having to concatenate columns!

Ключи - это не устройство для экономии времени, а устройства для обеспечения целостности данных.

Первичный ключ - это уникальный идентификатор. Я могу быть составной или нет, но важно то, что она уникальна и не может быть обнуляемой.

Внешний ключ также является устройством целостности данных. Это гарантирует, что если данные ссылаются на что-то в другой таблице, на самом деле должно существовать в этой другой таблице .

2 голосов
/ 14 февраля 2012

Нет, вы не можете ссылаться на ключи, как если бы они были столбцами.Вам нужно будет перечислить все столбцы как в PK, так и в FK ... как в вашем подпункте select, так и в предложении join * on.

...