【发布时间】:2011-12-13 04:24:58
【问题描述】:
我正在尝试根据另一个表中的其他两列更新表中的某些行。作为一个玩具模型,考虑两个表: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)。那么我想要的可能吗?
(另一个问题是没有一个表有任何主键,尤其是没有单列的。如果不是这样,我会用它来简单地识别行。)
【问题讨论】: