一个表中的SQLite UPDATE字段基于另一个表的外键

时间:2013-12-18 15:49:56

标签: python sqlite foreign-keys one-to-many foreign-key-relationship

正如在这个问题(SQLite field with a list of foreign keys)中,我试图将我的房地产经纪人和列表保存在带有python的SQLite数据库中。

我按照建议做了,现在有了这样的表:

CREATE TABLE listings(
    listing_id        INTEGER PRIMARY KEY AUTOINCREMENT,
    listing_address   TEXT UNIQUE NOT NULL,
    acq_date          DATE
    agent_id          INTEGER,
    FOREIGN KEY (agent_id) REFERENCES agent (agent_id)
)

CREATE TABLE agent(
     agent_id         INTEGER PRIMARY KEY AUTOINCREMENT,
     agent_name       TEXT NOT NULL,
     agent_last_request  TEXT
)

我现在正在尝试根据列表中的计算更新代理表。我的理论是必须有一种单行的方法来使用来自另一个表行的外键来更新字段。事实上,我已经有了这个工作:

given my_listing_id
given new_request_data

"SELECT agent_id FROM listings WHERE listing_id = ?", (my_listing_id,)
fetch etc..
"UPDATE agent SET agent_last_request = ? WHERE agent_id = ?", (new_request_data, agent_id)

但为了做到这一点,我认为应该有一行SQL使用外键来更新另一个表。我试过这样的东西,但失败了:

"UPDATE agent, listings SET agent_last_request = ? WHERE agent.agent_id = listings.agent_id AND listings.agent_id = ?", (new_request_data, my_listing_id)

那么当我有my_listing_id时如何更新agent_last_request?我应该继续这么做吗?

1 个答案:

答案 0 :(得分:0)

要查找单个值,可以使用标量子查询:

UPDATE agent
SET agent_last_request = ?
WHERE agent_id = (SELECT agent_id
                  FROM listings
                  WHERE listing_id = ?)