我想基于另一个表中的其他两列更新表中的某些行。作为玩具模型,请考虑两个表: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和一个日期,子查询是比较复杂的,涉及一个加入/ EXCEPT子句。)
这很笨拙,根据数值可能有错误。理想情况下,我可以在sql中像这样创建元组:
UPDATE people SET has_license='Y'
WHERE (first_name, last_name) IN (SELECT first_name, last_name FROM drivers)
但这是无效的SQL(根据SQLite)。那么我想甚至有可能吗?
(另外一个问题是,没有一个表有任何主键,特别是没有单列的。如果不是这样,我会用它来简单地标识行。)
AFAICT,在标准SQL中,UPDATE语句没有FROM子句。它不在sqlite,也不在Oracle(生产数据库)中,也不在网上找到的sql指南。 (这是有道理的,因为加入的结果是一个临时的,我需要更新永久的东西。) – AFoglia
它在SQL Server ....让我研究你的SQLite语法。 – JNK
我会使用'EXISTS'发布一个版本,让我知道它是否适用于您的实施。 – JNK