我正在尝试根据另一个表中的另外两个列更新表中的某些行。作为玩具模型,请考虑两个表:People,列first_name,last_name和has_license;驱动程序,列first_name和last_name。现在我想更新第一个表,所以对于first_name和last_name的所有元组都更新了第一个表的has_license ='Y'。
我能做到:
UPDATE people SET has_license='Y'
WHERE first_name + last_name IN (SELECT first_name + last_name FROM drivers)
(在我的实际查询中,first_name和last_name是外部设置的记录id和日期,子查询更复杂,涉及join / EXCEPT子句。)
这很笨拙,并且根据值可能会出错。理想情况下,我可以像这样在sql中创建元组:
UPDATE people SET has_license='Y'
WHERE (first_name, last_name) IN (SELECT first_name, last_name FROM drivers)
但那是无效的SQL(根据SQLite)。那就是我想要的甚至可能吗?
(另一个问题是没有一个表有任何主键,特别是不是单列的。如果不是这样,我会用它来简单地识别行。)
答案 0 :(得分:2)
这是 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)
答案 1 :(得分:0)
我认为你可以连接这些字段:
...first_name + last_name) IN (SELECT first_name + last_name...
或者
...first_name + ' : ' + last_name) IN (SELECT first_name + ' : ' + last_name...