我很新的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表本身在从这个新的子查询的条款,正如我们前面所说,你不能指的是所涉及的表(在其整体)在修改命令中的任何的子查询“。
我猜你执行的查询是:
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