Я хочу установить столбец в ноль в зависимости от трех других таблиц - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть 3 таблицы:

TableA                 TableB               TableC
Col1 ID                Col1 ID              TableA.ID
Col2 NAME              Col2 NAME            TableB.ID
Col3 STATUS

И я хочу установить для TableA.Col3 значение null, если table.c содержит TableA.ID и TableB.Id, где TableB.Name = "test".Возможно ли это?

Ответы [ 4 ]

1 голос
/ 26 апреля 2019

Попробуйте Update, используя Join

UPDATE TableA T1 
  JOIN TableB T2 on T1.ID = T2.ID
  JOIN TableC T3 on T1.ID = T3.ID
SET T1.STATUS = NULL
WHERE T2.Name = 'test'   

ОБНОВЛЕНИЕ MySQL JOIN

0 голосов
/ 26 апреля 2019

Я бы порекомендовал exists для этой цели:

update tablea
    set status = null
where exists (select 1
              from tablec c join
                   tableb b
                   on b.id = c.tableb_id 
              where tablea.id = c.tablea_id and b.name = 'test'
             );

Это должно работать в любой базе данных. Это также дает оптимизатору больше возможностей для поиска наилучшего плана запросов.

0 голосов
/ 26 апреля 2019

Что-то вроде этого должно сделать это.

    UPDATE tableA as t
    Set Status=NULL from TableA t 
    left join TableC tc on t.ID=tc.tablea_id 
    left join tableb tb on tb.id=tc.tableb_id
    where tc.tablea_id is not null and tb.name='test'
0 голосов
/ 26 апреля 2019

Вы можете сделать:

update tablea a
join tablec c on c.tablea_id = a.id
join tableb b on b.id = c.tableb_id
set status = null
where b.name = 'test'

Результат:

id  name    status
--  ------  ------
10  Peter   1     
20  Anne    null  
30  Claire  3     

Я использовал следующие данные:

create table tablea (
  id int,
  name varchar(10),
  status int
);

create table tableb (
  id int,
  name varchar(10)
);

create table tablec (
  tablea_id int,
  tableb_id int
);

insert into tablea (id, name, status) values (10, 'Peter', 1);
insert into tablea (id, name, status) values (20, 'Anne', 2);
insert into tablea (id, name, status) values (30, 'Claire', 3);

insert into tableb (id, name) values (101, 'one');
insert into tableb (id, name) values (102, 'test');

insert into tablec (tablea_id, tableb_id) values (10, 101);
insert into tablec (tablea_id, tableb_id) values (20, 102);
insert into tablec (tablea_id, tableb_id) values (30, 101);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...