このクエリを 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
ご覧のとおり、違いは最初のクエリの括弧のみです。最初のクエリでは、期待どおりの結果が得られます (3 つの選択すべてからすべての値を取得します。説明は不要です)。しかし、2番目のクエリを進めると、期待どおりの結果が得られますが、期待どおりではありません。これは、WHERE
句を満たす最初の選択からの値のみです。つまり、race1, mode1
whereがある場合condition = 1
、その結果のみが得られます。そうでない場合、私はrace2, mode2
どこに行きますかcondition = 1
。2 番目の select ステートメントでも空の場合は、3 番目の select ステートメントに従って値を取得します。かっこが指定されていない場合、なぜUNION ALL
動作するのですか?OR
編集: MySQL 5.0.51aを使用しています