我有这样的查询
explain query plan select t1.c from t1, t2 where t1.id = 0;
返回
selectid order from detail
"0" "0" "0" "SEARCH TABLE t1 USING PRIMARY KEY (id=?)"
"0" "1" "1" "SCAN TABLE t2"
就我而言,t2不在where或select子句中使用。为什么SQLite仍打算扫描它??
答案 0 :(得分:1)
如果join-operator是...逗号(“,”)并且没有ON或USING子句,则连接的结果只是左侧和右侧数据集的笛卡尔积。
因此需要扫描另一个表以确定要返回的行数:
> CREATE TABLE t1(c);
> INSERT INTO t1 VALUES ('c');
> CREATE TABLE t2(x);
> INSERT INTO t2 VALUES (1), (2);
> select t1.c from t1, t2;
c
c