這個問題在這里已經有了答案:
現在,如果我創建列別名,則會收到錯誤訊息。在這個例子中,我將first_name和連接last_name成一個fullname列別名,然后查詢 value1 和 value2 之間的名稱。
SELECT first_name ||' '|| last_name AS fullname
FROM actor;
WHERE fullname BETWEEN 'Zero Cage' AND 'Fred Costner';
輸出:
![為什么從列別名查詢時出現錯誤?[復制]](https://img.uj5u.com/2021/11/02/e345c8e2eeb842c1a33e7428d6949c8d.png)
預先感謝您抽出時間提供幫助!
uj5u.com熱心網友回復:
在 postgres 檔案中:
輸出列的名稱可用于在
ORDER BY andGROUP BY子句中參考列的值,但不能在WHEREorHAVING子句中參考;在那里你必須寫出運算式。
這是根據 SQL 標準,可能不是很直觀。這背后的(歷史)原因是SELECT查詢中的事件序列。WHERE而HAVING被認為是列別名之前解決,而GROUP BY與ORDER BY后來發生的,已應用于列別名后。另請注意,輸入和輸出名稱之間的沖突在 ORDER BY 和 GROUP BY 中的解決方式不同 - 另一個歷史性的怪事(背后有原因,但仍然可能令人困惑)。
您可以使用以下方式之一:
- 使用完整的兩列名稱
SELECT first_name || ' ' || last_name AS fullname
FROM actor
WHERE first_name || ' ' || last_name BETWEEN :conditio1 AND :conditio2
- 使用 CTE
WITH data s (
SELECT first_name || ' ' || last_name AS fullname
FROM actor
)
SELECT *
FROM data
WHERE fullname BETWEEN :conditio1 AND :conditio2
- 使用子查詢
SELECT *
FROM (
SELECT first_name || ' ' || last_name AS fullname
FROM actor
) tmp
WHERE tmp.fullname BETWEEN :conditio1 AND :conditio2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344740.html
標籤:sql PostgreSQL 列别名
上一篇:重復記錄-洗掉陳述句不起作用
