问题:既然 FROM 子句在 WHERE 子句之前在逻辑上执行,难道不能在 WHERE 子查询中使用 FROM 子查询的结果吗?
例如:
假设在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
,输出具有该 salary
最大 name
的单行: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
最佳答案
如果要多次使用子查询的结果,请使用 with
,而不是子查询:
with T as (
select rowid, name as name1, data1, data2, salary
from MyTable
where salary = (select max(salary) from MyTable where name=name1)
)
select name1 as name, data1, data2, salary
from T
where rowid = (select max(rowid) from T where name1 = name);
您的问题的答案显然是“否”。 SQLite 不允许你想要什么。任何其他版本的 SQL 也没有。
FROM
子句定义了可用于限定列的表别名,但这些别名不能在另一个 FROM
子句中重复使用。请注意,列可以在 WHERE
中使用,但不能在“表”中使用。关于sql - 在 WHERE-subquery 中使用 FROM-subquery 的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29924989/