Обновление строк на основе условия нескольких столбцов - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь обновить некоторые строки в таблице на основе двух других столбцов в другой таблице.В качестве игрушечной модели рассмотрим две таблицы: People со столбцами first_name, last_name и has_license;Драйверы, с колонками first_name и last_name.Теперь я хочу обновить первую таблицу, чтобы has_license = 'Y' для всех кортежей first_name и last_name, которые также есть в таблице драйверов.

Я мог бы сделать:

UPDATE people SET has_license='Y'
WHERE first_name + last_name IN (SELECT first_name + last_name FROM drivers)

(Мой фактический запрос: first_name и last_name - это внешний идентификатор записи и дата, а подзапрос более сложный, включающий предложение join / EXCEPT.)

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

UPDATE people SET has_license='Y'
WHERE (first_name, last_name) IN (SELECT first_name, last_name FROM drivers)

Но это недопустимый SQL (согласно SQLite).Так возможно ли то, что я хочу?

(Еще одна проблема состоит в том, что ни одна из таблиц не имеет первичных ключей, особенно не одноколоночных. Если бы это было не так, я бы использовал это, чтобы простоопределить строку.)

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011

Это SQL

Просто используйте JOIN!

UPDATE people 
SET has_license='Y'
FROM People
INNER JOIN Drivers
    ON Drivers.First_name = people.first_name
    AND Drivers.Last_name = people.last_name

В SQL Server я бы использовал псевдонимы, но я не знаком стонкости синтаксиса SQLite.Это должно быть действительно AFAIK.

РЕДАКТИРОВАТЬ

Ниже используется версия EXISTS:

UPDATE people 
SET has_license='Y'
WHERE EXISTS (SELECT 1 FROM Drivers
              WHERE Drivers.First_name = people.first_name
              AND Drivers.Last_name = people.last_name)
0 голосов
/ 10 декабря 2011

Я думаю, вы можете объединить поля:

...first_name + last_name) IN (SELECT first_name + last_name...

Или

...first_name  + ' : ' +  last_name) IN (SELECT first_name  + ' : ' +  last_name...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...