1

テーブルobjects

id    name    is_animal
-----------------------
1     dog     1
2     cat     1
3     chair   0
4     rabbit  1

クエリ

(SELECT name AS animal_name FROM objects WHERE is_animal = 1)
UNION
(SELECT name AS object_name FROM objects WHERE is_animal = 0)

そしてその結果

[animal_name] => dog
[animal_name] => cat
[animal_name] => rabbit
[animal_name] => chair    // expected: [object_name] => chair

私はすでにAS2番目のSELECTで使用しましたが、なぜanimal_name代わりに返されるのobject_nameですか?

4

2 に答える 2

0

UNION

(SELECT name AS animal_name,'' object_name FROM objects WHERE is_animal = 1)
UNION
(SELECT '' as animal_name, name AS object_name FROM objects WHERE is_animal = 0)

case

select case is_animal when 1 name else '' end as  animal_name,
       case is_animal when 0 name else '' end as  object_name
from objects
于 2012-11-04T07:25:47.613 に答える
0

UNIONクエリでは、常に最初のSELECTの列名が、最終的な結果のビューの列名として選択されます。個々のSELECTの対応する列名が異なる場合、列名が最後になるとどのように予想しますか?UNIONクエリの後続のSELECTでは、意味がないため、列名についても言及しないのが適切です。

ドキュメントからMySQLは同じものを使用しています

(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)
UNION
(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col, col1a;
于 2012-11-04T07:26:26.577 に答える