我试图基于另一个表中的其他两个列来更新表中的某些行。作为玩具模型,请考虑两个表:People,具有first_name,last_name和has_license列;具有栏first_name和last_name的驱动程序。现在,我想更新第一个表,以便has_license =’Y’来查找也在Drivers表中的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是外部设置的记录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)。那我想什至有可能吗?
(另一个问题是,这些表都没有任何主键,尤其是没有单列键。如果不是这种情况,我会用它来简单地标识行。)
这是 SQL
只需使用一个JOIN!
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:
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)