Обновить запрос с помощью Join SQL Server - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть эти две таблицы enter image description here enter image description here

Первое изображение представляет ObjectData Таблица, а второе ColumnsSet Таблица.

В ObjectData атрибут ColID представляет внешний ключ ColumnID в ColumnsSet Таблица.

Я хочу обновитьячейка в атрибуте данных ObjectData , например, номер 10 будет 20.

запрос:

UPDATE ObjectData SET ObjectData.Data = 'Ahmed'
FROM ColumnsSet
INNER JOIN ObjectData ON ColumnsSet.ColumnID = ObjectData.ColID
WHERE ObjectData.ColID = ColumnsSet.ColumnID

Что такое правильный оператор SQL?

Ответы [ 2 ]

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

Позвольте мне показать на примере, как обновить.Сначала мы должны создать таблицы:

CREATE TABLE ObjectData
(
     ID INT,
     CollID INT,
     Data VARCHAR(50)
)

CREATE TABLE ColumnSet
(
     ColumnID INT,
     ColumnName VARCHAR(50)
)

Затем вставить данные:

INSERT INTO ObjectData
(
    ID,
    CollID,
    Data
)
VALUES
(   113, -- ID - int
    1, -- CollID - int
    '1' -- Data - varchar(50)
    )
, (114, 5, '')
, (115, 10015, 'Mohamed')
, (116, 20026, 'Abdulghani')

INSERT INTO ColumnSet
(
    ColumnID,
    ColumnName
)
VALUES
(   1, -- ColumnID - int
    'ID' -- ColumnName - varchar(50)
    )
, (5, 'EmployeeID')
, (10015, 'FirsName')

И последний шаг - это обновление, где вы должны записать, какие строки должны быть обновлены с помощью WHEREоператор:

UPDATE od
 SET od.Data = 'Hey!'
FROM ObjectData  od 
INNER JOIN ColumnSet cs ON cs.ColumnID =od.CollID
--WHERE OD.DATA IN ('1', '10')
WHERE OD.CollID IN (1, 5)

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

--Check our update statements:
SELECT
*
FROM ObjectData  od 
INNER JOIN #ColumnSet cs ON cs.ColumnID =od.CollID
WHERE OD.DATA IN ('1', '10')
0 голосов
/ 27 ноября 2018
UPDATE a SET a.Data = 'Ahmed'
FROM ObjectData  a 
INNER JOIN ColumnsSet  ON ColumnsSet.ColumnID = a.ColID

когда вы используете внутреннее объединение, он выбирает данные, которые возвращают условие соединения true, а не нулевые данные, нет необходимости в этом 'where ....', но вы должны быть уверены, какие данные будут обновляться при первом использованииэтот код и выберите все данные

SELECT * 
FROM ObjectData  a 
INNER JOIN ColumnsSet  ON ColumnsSet.ColumnID = a.ColID

, а затем напишите предложение where, затем измените его на update

...