как обновить таблицу которая использовала Union - PullRequest
0 голосов
/ 20 марта 2019

Как обновить таблицу, которая получает результат, используя Select Union из 2 таблиц: Допустим, у нас есть: (с использованием SQL Server)

 select something
from table1 join
     table2
     on ??? 
where condition1
union 
select something
from table1 join
     table3
     on ???
where condition2

код

    select it.itemid,it.itemgroupid,it.itemtype, it.itemname
    from item it
    left join part r on r.itemid = it.itemid 
    left join SALES sl on it.itemid=sl.itemid
   where
      it.itemtype =1
      and r.partnumber =10
      and sl.CREATEDDATE between '2010-01-01 00:00:00' and CURRENT_TIMESTAMP

UNION 
     select distinct it.itemid,it.itemgroupid,it.itemtype, it.itemname
     from item it 
     left join salesdetail sa on sa.itemid=it.itemid 
     it.itemtype =1
     where sa.SALESSTATUS =1

` Как я могу обновить поле в таблице 1, которое зависит от результата запроса Select выше?

Теперь я хочу обновить поле itemTable x до 1, если itemid совпадает с идентификатором ите, который выдает вышеприведенный выбор

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Я думаю, вы могли бы попробовать что-нибудь связать это:

`UPDATE item SET item_id =
select it.itemid
    from item it
    left join part r on r.itemid = it.itemid 
    left join SALES sl on it.itemid=sl.itemid
   where
      it.itemtype =1
      and r.partnumber =10
      and sl.CREATEDDATE between '2010-01-01 00:00:00' and CURRENT_TIMESTAMP

UNION 
     select distinct it.itemid
     from item it 
     left join salesdetail sa on sa.itemid=it.itemid 
     it.itemtype =1
     where sa.SALESSTATUS =1`
0 голосов
/ 20 марта 2019

Подумайте об использовании предложения WHERE с IN для обновления.Обязательно обновите с именем какое-то поле .Ниже в качестве значения запроса IN используется CTE.Все поля были удалены в SELECT, кроме itemid :

WITH cte AS
  (select it.itemid
   from item it
   left join part r on r.itemid = it.itemid 
   left join SALES sl on it.itemid = sl.itemid
   where it.itemtype =1
     and r.partnumber =10
     and sl.CREATEDDATE between '2010-01-01 00:00:00' and CURRENT_TIMESTAMP

   union

   select distinct it.itemid
   from item it 
   left join salesdetail sa on sa.itemid = it.itemid 
   where it.itemtype = 1
     and sa.SALESSTATUS =1
  )

UPDATE item it
SET it.<SOME FIELD> = 1
WHERE it.itemid IN cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...