我有这样的查询有两种实现方式:为什么UNION ALL有和没有括号表现不一样?
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
条款的值。也就是说,如果有race1, mode1
其中condition = 1
,那么我只得到那个结果。如果没有,那么我得到race2, mode2
,其中condition = 1
。如果第二个select语句是空的,那么我会根据第三个select语句获取值。如果没有提供括号,为什么UNION ALL
的行为类似于OR
?
编辑:我使用MySQL的5.0.51a
您必须对所有查询使用相同的别名ex: - race1作为race,mode1作为 – 2012-04-18 08:34:31
@ sam_13模式,MySQL不需要它,列名将与第一个查询中的名称相同。在这种情况下'race1'和'mode1' .. – nawfal 2013-06-08 06:00:19