除非我錯過了你的問題的東西,你只需要更新:
update tb set b1 = (select a2 from Ta where a1 = b2);
更新1
OP提到,她/他是使用SQLite 17年2月8日,所以不支持「交叉表」更新。
我發現這個link它提供了一種解決方法。它要求加入的字段是主鍵,這是這個問題的情況。
以下是該語句:
insert or replace into tb (b2, b1)
select ta.a1, ta.a2
from ta, tb
where ta.a1=tb.b2;
我沒有測試它,否則然後驗證它的執行沒有錯誤。就我的SQL知識而言,它應該與我在此更新之前發佈的更新聲明相同。
UPDATE 2
沒有與上方的問題,因爲OP指出。它將插入新記錄而不是更新Tb中的現有記錄。我現在看到OP正在嘗試做什麼的矛盾:
假設使用了sqlite 3.x.y。一條簡單的update
聲明可以完成工作。問題是,在Tb
多條記錄有相同的b2
值存在於Ta.a1
它就會失敗:
sqlite> create table ta (
...> a_key INTEGER PRIMARY KEY,
...> a_val TEXT);
sqlite> create table tb (
...> b_key TEXT PRIMARY KEY,
...> b_val INTEGER);
sqlite> insert into ta values (1, 'a');
sqlite> insert into tb values ('z', 1);
sqlite> insert into tb values ('y', 1);
sqlite> update tb set b_key=(select a_val from ta where a_key=b_val);
Error: column b_key is not unique
所以這裏的解決方案是讓Tb1.b2
獨特:
create table Tb (
b1 VARCHAR(12) PRIMARY KEY,
b2 INTEGER UNIQUE,
b3 VARCHAR(8),
b4 VARCHAR(8));
使Tb.b2
獨特使我的第一次更新的解決方案正常工作,防止上述暴露的唯一性。
之前嘗試過,第二個WHERE中的SELECT語句存在問題。此外,似乎sqlite不知道如何處理像Ta.a1 – user1362978 2012-04-28 19:29:13