我在以下查询中遇到语法错误:
SELECT 1,2 WHERE 1=1
但是这个查询工作正常:
SELECT 1,2 FROM (SELECT 1) t WHERE 1=1;
看起来WHERE子句总是需要一个表。有时,在复杂查询的深度,使用SELECT / WHERE组合来打开和关闭某些功能是很好的。有没有办法不总是添加FROM (SELECT 1) t
?
编辑:
我发现了另一个类似的问题
(SELECT 1 x)
UNION
(SELECT 2)
WHERE 1=1
给出语法错误,但这不会:
SELECT x
FROM
(
(SELECT 1 x)
UNION
(SELECT 2)
) t
WHERE 1=1
我正在使用5.1.48-community MySQL Community Server (GPL)
。还有其他人看到这个吗?
答案 0 :(得分:1)
您可以使用“FROM DUAL”来表示您不是从表中选择。如:
SELECT 'Hello, World' FROM DUAL;
答案 1 :(得分:0)
此:
SELECT 1 x
UNION
SELECT 2
WHERE 1 = 1
是两个查询,与UNION
结合使用。第二个问题:
SELECT 2
WHERE 1 = 1
无效,因为它在使用FROM
时错过了WHERE
子句。
此:
SELECT x
FROM (
SELECT 1 x
UNION
SELECT 2
) t
WHERE 1 = 1
是内嵌视图中的SELECT
,同样是两个查询与UNION
相结合。
这两个查询都没有使用WHERE
,因此他们没有FROM
就可以了。两个查询都有效,结果查询也是如此。