2
問題:由於FROM子句的WHERE子句前執行邏輯,不應該也有可能使用在WHERE,子查詢FROM-子查詢的結果?使用的結果FROM-子查詢的WHERE,子查詢
例如:
假設下表中的sqlite3定義:
create table MyTable(name, data1, data2, salary);
insert into MyTable values('J', 4, 8, 30);
insert into MyTable values('J', 8, 4, 30);
insert into MyTable values('J', 16, 16, 20);
insert into MyTable values('Dan', 32, 32, 25);
以下查詢的目的是,對於每個name
,以輸出單個行與該name
最大salary
:
select name1 as name, data1, data2, salary
from (
select rowid, name as name1, data1, data2, salary
from MyTable
where salary=(
select max(salary) from MyTable where name=name1)
) T
where rowid = (
select max(rowid)
from T
where name1 = name);
然而,sqlite3的給出了錯誤: 錯誤:近11行:沒有這樣的表:T
FYI這就是所謂的「公用表表達式」:https://www.sqlite.org/lang_with.html – AaronLS
不幸的是,直到最近,sqlite3的不支持WITH子句。是否有解決方法(除了創建一個臨時表,這不是線程安全的,除非我缺少一個簡單的方法來使其安全)? – AlwaysLearning