以下SQL返回错误:
select * from(1, select random())
但是如果你改变它的顺序,那么错误就会消失。
select * from(select random(), 1)
为什么会这样?
同样,我想要做的是获得两个随机数,这些数字不起作用
select * from(select random(), select random());
但如果你把它括在括号中就行了
select * from((select random()),(select random()));
所以这里的问题是:......有什么问题吗?
我哪里出错了?
答案 0 :(得分:3)
SELECT语句总是以单词SELECT(或WITH,但不在某些数据库中,也不在子查询中)开头,因此您的第一个查询:
select * from(1, select random())
无效,因为您可以看到子查询以数字1开头,而不是单词SELECT
您的第二个问题:
select * from(select random(), 1)
是有效的,因为在子查询中,查询以SELECT
一词开头此查询:
select * from(select random(), select random());
无效,因为在from子句中,您必须列出表,视图或内联视图(您尝试执行的操作)。内联视图必须是满足select语句最低要求的完整查询,并且必须包含该查询()。在上面的查询中,您使用逗号分隔两个查询。这不是你如何分开查询,否则数据库将如何区分选择列表中的多个项目和新查询的开始?
此版本:
select * from((select random()),(select random()));
是正确的,因为您已在()中包含每个内联视图,并用逗号分隔每个封闭的内联视图。在你没有附上它们之前。
答案 1 :(得分:-1)
FROM
或JOIN
子句中的参数必须是表名或子查询,后者必须括在括号中。当你写:
SELECT * FROM (SELECT RANDOM(), 1)
SELECT RANDOM(), 1
是一个有效的子查询。但是当你写道:
SELECT * FROM (1, SELECT RANDOM())
1, SELECT RANDOM()
不是子查询。子查询必须以SELECT
开头。