2

我通过两种方式实现了这个查询:

SELECT race1, mode1
FROM organization 
WHERE condition = 1 LIMIT 1

UNION ALL

(SELECT race2, mode2
FROM   organization 
WHERE  condition = 1 LIMIT 1)

UNION ALL

(SELECT race, mode FROM  organization_new
WHERE PK_Id = 1)

SELECT race1, mode1
FROM organization 
WHERE condition = 1 LIMIT 1

UNION ALL

SELECT race2, mode2
FROM   organization 
WHERE  condition = 1 LIMIT 1

UNION ALL

SELECT race, mode FROM  organization_new
WHERE PK_Id = 1

如您所见,区别仅在于第一个查询中的括号。在第一个查询中,我得到了预期的结果(从所有三个选择中获取所有值,无需解释)。但是当我继续进行第二个查询时,我得到了想要的结果,但没有达到预期的结果,这只是第一个 select 满足WHERE子句的值。也就是说,如果有race1, mode1where condition = 1,那么我只会得到那个结果。如果没有,那么我在race2, mode2哪里condition = 1。如果即使第二个 select 语句为空,我也会根据第三个 select 语句获取值。如果没有提供括号,为什么UNION ALL表现得像一个?OR

编辑:我正在使用 MySQL 5.0.51a

4

1 回答 1

2

那是因为您使用的是 LIMIT。

MySql 参考说,如果你想在单个选择上使用 ORDER BY 或 LIMIT,那么你必须用括号括住你的选择。

示例(来自 MySQL 参考):

要将 ORDER BY 或 LIMIT 应用于单个 SELECT,请将子句放在括 SELECT 的括号内:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

资源可以在这里找到:http: //dev.mysql.com/doc/refman/5.0/en/union.html

编辑:更改了参考链接,因为以前的参考链接是针对 5.5 版的。但答案没有改变。

于 2012-04-18T08:38:04.727 回答