为什么我可以参考表中的SQL查询被修改

问题描述 投票:0回答:1

我很新的SQL,和我有一个关于一些基本问题:

据我所知,在阅读本书格鲁伯,它不可能使用表,现在正在修改中的“FROM”的句子,以及在子查询。所以,我有一个表:

snum |sname  |city     |comm
----------------------------
1001 |Peel   |London   |0.12
1002 |Serres |San Jose |0.13
1003 |Axelrod|New York |0.1
1004 |Motika |London   |0.11
1007 |Rifkin |Barcelona|0.15
1100 |Bianco |San Jose |0.14

和查询:

INSERT INTO SalespeopleCopy(sname, city, comm)
SELECT sname, city, comm FROM SalespeopleCopy seconddata
WHERE seconddata.city >= (Select MAX(city) from SalespeopleCopy);

表已执行它后改变:

snum |sname  |city     |comm
----------------------------
1001 |Peel   |London   |0.12
1002 |Serres |San Jose |0.13
1003 |Axelrod|New York |0.1
1004 |Motika |London   |0.11
1007 |Rifkin |Barcelona|0.15
1100 |Bianco |San Jose |0.14
1102 |Serres |San Jose |0.13 (new row)
1100 |Bianco |San Jose |0.14 (new row)

在第三行中我引用SalespeopleCopy表,该表中的“FROM”的句子。而SalespeopleCopy是在同一时间被修改。

它是SQLite的(3)数据库的功能?还是我不正确认识的基础?

关于本书我在那里读书是一个名为“SJpeople”我们希望将一些行插入到它的表。我们魔杖检查是当前行SJpeople表已经存在插入之前。

引用:

“这将是更好,如果你能设法找出这些价值观已经插入到表中,你尝试之前做一遍,通过增加另一个子查询(使用运营商希望存在,,<> ALL,等等),以谓语。不幸的是,为了做好这项工作,你需要参考SJpeople表本身在从这个新的子查询的条款,正如我们前面所说,你不能指的是所涉及的表(在其整体)在修改命令中的任何的子查询“。

sql sqlite
1个回答
0
投票

我猜你执行的查询是:

INSERT INTO SalespeopleCopy(snum, sname, city, comm)
SELECT snum, sname, city, comm FROM SalespeopleCopy seconddata
WHERE seconddata.city >= (Select MAX(city) from SalespeopleCopy);

包括snum列,in't呢? 通过:

Select MAX(city) from SalespeopleCopy

你得到:

San Jose

因此,通过:

SELECT snum, sname, city, comm FROM SalespeopleCopy seconddata
WHERE seconddata.city >= (Select MAX(city) from SalespeopleCopy)

你得到2行:

1102 |Serres |San Jose |0.13
1100 |Bianco |San Jose |0.14

并且这些2行被插入到表中。 在您的查询的语句,您引用表SalespeopleCopy 3倍的名字。 第二届参考化名为seconddata

FROM SalespeopleCopy seconddata

你也可以把它写:

FROM SalespeopleCopy AS seconddata

所以从要SELECT行的表的名称将是从现在起seconddata 虽然是同一个表,所以在WHERE部分:

WHERE seconddata.city >= .... 

没有混乱,你指的是哪种表的city

  • 其中行被插入到表的city列或
  • 其中行选自所述表的列city 这不仅是SQLite的一个特点,那就是标准的SQL
© www.soinside.com 2019 - 2024. All rights reserved.