SQLite无法选择

时间:2014-08-01 22:58:47

标签: sql sqlite

以下SQL返回错误:

select * from(1, select random())

但是如果你改变它的顺序,那么错误就会消失。

select * from(select random(), 1)

为什么会这样?

同样,我想要做的是获得两个随机数,这些数字不起作用

select * from(select random(), select random());

但如果你把它括在括号中就行了

select * from((select random()),(select random()));

所以这里的问题是:......有什么问题吗?

  1. 我的SQL语句?
  2. SQLite的?
  3. SQL标准?
  4. 我哪里出错了?

2 个答案:

答案 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)

FROMJOIN子句中的参数必须是表名或子查询,后者必须括在括号中。当你写:

SELECT * FROM (SELECT RANDOM(), 1)

SELECT RANDOM(), 1是一个有效的子查询。但是当你写道:

SELECT * FROM (1, SELECT RANDOM())

1, SELECT RANDOM()不是子查询。子查询必须以SELECT开头。