【发布时间】:2012-04-18 08:26:23
【问题描述】:
我通过两种方式实现了这个查询:
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
如您所见,区别仅在于第一个查询中的括号。 在第一个查询中,我得到了预期的结果(从所有三个选择中获取所有值,无需解释)。但是,当我继续使用第二个查询 时,我得到了想要的结果,但没有达到预期的结果,这只是第一次选择的值符合WHERE 子句。也就是说,如果在condition = 1 的位置存在race1, mode1,那么我只会得到那个结果。如果没有,那么我得到race2, mode2condition = 1。如果即使第二个 select 语句为空,我也会根据第三个 select 语句获取值。如果没有提供括号,为什么 UNION ALL 的行为类似于 OR?
编辑:我使用的是 MySQL 5.0.51a
【问题讨论】:
-
您必须对所有查询使用相同的别名,例如:-race1 作为种族,mode1 作为模式
-
@sam_13 MySQL 不需要,列名将与第一个查询中的相同。在这种情况下
race1和mode1..
标签: mysql select parentheses union-all