Используйте WHERE ... IN с выбором нескольких столбцов - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу обновить столбец data в tbl1, когда оба key1 и key2 перечислены в результатах другого запроса:

CREATE TABLE tbl1(
  "key1" INT,
  "key2" INT,
  "data" VARCHAR(20)
);

UPDATE tbl1 set data="test 123"
WHERE
   (key1, key2)
IN
   (SELECT key1, key2 from tbl2 where user='123')

Только SELECT key1, key2 from tbl2 where user='123' возвращает что-то вроде:

|key1|key2|
|----|----|
| 2  | 5  |
|----|----|
| 9  | 4  |
|----|----|
| 1  | 12 |
|----|----|

Таким образом, UPDATE должен повлиять на tbl1 только те строки, где key1 и key2 перечислены в строках SELECT.

Каков был бы правильный способ достичь этого?

Ответы [ 2 ]

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

Вот решение.Не красивый, но это решение.

UPDATE tbl1 set data = "test 123"

where 
(
   (key1 || "," || key2)

   IN

   (select (key1 || "," || key2) from tbl2 where user='123' ) 

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

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

CREATE TABLE tbl1(
  "key1" INT,
  "key2" INT,
  "data" VARCHAR(20)
);

UPDATE tbl1 set data="test 123"
WHERE
   (key1 IN (SELECT key1 from tbl2 where user='123'))
   AND (key2 IN (SELECT key2 FROM tbl2 WHERE user='123));

Это будет означать выполнение запроса SELECT дважды (если оптимизатор не умен);Я не думаю, что есть способ избежать этого, но был бы рад оказаться неправым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...