|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите, пожалуйста, как реализовать запрос под следующую задачу. Предположим есть две таблицы, в каждой по два столбца - Товар (ключ) и Цена. Необходимо соединить эти таблицы, например, к первой присоединить вторую и если цены в разрезе товара между таблицами отличаются, тогда необходимо в присоединяемой (вторая) таблице обновить цены (если такого товара нет, тогда добавить новую строку) на основании данных из первой таблицы. Задача звучит просто, но я в T-SQL новичок и для меня на данном этапе проблематично реализовать данный запрос. Единственное пока до чего я додумался - это заполнение одной таблицы на основании другой: Код: sql 1. 2. 3. 4.
Но для моей задачи это не подходит, так как нет сравнения по цене и при совпадении ключевых полей появится ошибка. За ранее благодарен за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 05:48 |
|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
Обычный MERGE INTO table2 USING table1. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 07:35 |
|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
xa1ter, Код: sql 1. 2. 3. 4. 5. 6.
Найдите учебник по запросам. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 13:12 |
|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
Большое спасибо за ответы! Учебник есть ("Основы T-SQL"), но недавно отдал его товарищу, на дня заберу обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2021, 02:42 |
|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
xa1ter Большое спасибо за ответы! Учебник есть ("Основы T-SQL"), но недавно отдал его товарищу, на дня заберу обратно. Лайфхацк: не забирайте учебник, может, хоть товарищ почитал его, и задайте ему вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2021, 15:44 |
|
Вопрос по написанию запроса
|
|||
---|---|---|---|
#18+
IF OBJECT_ID('tempdb..#TestMerge') IS NOT NULL DROP TABLE #TestMerge; GO CREATE TABLE #TestMerge ( ID INT NOT NULL, K INT NOT NULL, T VARCHAR(40) NOT NULL ); ;WITH X AS ( SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n) ) INSERT INTO #TestMerge(ID, K, T) SELECT TOP 30 RN, RN % 4, RIGHT(CONCAT('0000', RN % 17), 3) FROM ( SELECT -1 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN FROM X AS X1, X AS X2 ) XX ORDER BY RN ; SELECT * FROM #TestMerge ORDER BY K, T; IF OBJECT_ID('tempdb..#IDS') IS NOT NULL DROP TABLE #IDS; CREATE TABLE #IDS(KK INT NOT NULL); INSERT INTO #IDS(KK) VALUES(0), (1) ; WITH t AS ( SELECT t.* FROM #TestMerge t INNER JOIN #IDS I ON I.KK = t.K ) MERGE t AS target USING ( SELECT ID, K, T + T AS T FROM #TestMerge WHERE K IN (1, 0) AND ID <= 20 UNION ALL SELECT 9999, 0, '999999' UNION ALL SELECT 8888, 1, '888888' ) AS source ON source.ID = target.ID AND source.K = target.K WHEN MATCHED AND ( source.T <> target.T ) THEN UPDATE SET T = source.T WHEN NOT MATCHED BY TARGET THEN INSERT (ID, K, T) VALUES ( ID, K, T ) WHEN NOT MATCHED BY SOURCE THEN DELETE ; SELECT * FROM #TestMerge ORDER BY K, T; ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 17:42 |
|
|
start [/forum/topic.php?fid=46&msg=40089769&tid=1684411]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 274ms |
0 / 0 |