运行PostgreSQL(7.4和8.x),我以为这是可行的,但是现在我遇到了错误。
我可以单独运行查询,它可以正常工作,但是如果我使用UNION或UNION ALL,则会引发错误。
出现此错误:(警告:pg_query():查询失败:错误:列“ Field1”不存在…按情况订购“ Field1” W …)
SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE condition AND other_condition UNION ALL SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE yet_another_condition AND yet_another_other_condition ORDER BY CASE "Field1" WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 ELSE 4 END
这有效:
SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE yet_another_condition AND yet_another_other_condition ORDER BY CASE "Field1" WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 ELSE 4 END
这也有效:
SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE condition AND other_condition ORDER BY CASE "Field1" WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 ELSE 4 END
如果我不使用ORDER BY,而只使用UNION或UNION ALL,那么它也可以正常工作。
有任何想法吗?
将所有内容放入另一个SELECT中:
SELECT * FROM ( SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE condition AND other_condition UNION ALL SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE yet_another_condition AND yet_another_other_condition ) As A ORDER BY CASE field_1 WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 ELSE 4 END
或者,最好在ORDER BY中使用别名,因为它是在UNION的末尾传递的:
SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE condition AND other_condition UNION ALL SELECT "Field1" AS field_1, "Field2" AS field_2, "Field3" AS field_3, "Field4" AS field_4 FROM "TableName" WHERE yet_another_condition AND yet_another_other_condition ORDER BY CASE field_1 WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 ELSE 4 END