當 SELECT 陳述句中包含星號 (*) 時,我似乎無法弄清楚這里的 SQL 有什么問題。例如:
SELECT firstname, lastname, createdon, * from Person
Where firstname like '%J%'
Order By createdon desc
我得到'不明確的列名'CreatedOn'。錯誤。
但是,如果沒有 (*),它不會回傳其余的列,它可以正常作業。
任何建議或解決方法?
uj5u.com熱心網友回復:
createdon在回傳的資料集中兩次,一次來自顯式呼叫,一次來自*. 因此,名稱有 2 列,createdon因此ORDER BY createdon不明確;您想按命名的第一列createdon還是第二列排序(它們具有相同值的事實無關緊要,因為 SQL Server 只看到 2 個具有相同名稱的列)。
真的,您不應該使用SELECT *并且應該定義所有列;我認為不需要兩次回傳 3 列。但是,如果您“必須”擁有同一列的 2 個副本,那么您可以做的是ORDER BY在表名/別名中添加一個前綴;這將參考表中的列,而不是結果集中的列(其中有 2 個)。我在這里使用別名:
SELECT P.firstname,
P.lastname,
P.createdon,
* --Replace this with the actual columns you need, don't be lazy
FROM dbo.Person P
WHERE P.firstname like '%J%'
ORDER BY P.createdon DESC;
uj5u.com熱心網友回復:
在您的查詢中,您選擇了兩次“createdon”列,但按“其中一個”對結果進行排序。SQL 解釋器不知道它需要哪個“createdon”列對結果進行排序,因此回傳了不明確的列名。您可以通過在所選陳述句中使用別名“createdon”之一來解決此問題。
uj5u.com熱心網友回復:
我不確定,但試試吧
SELECT firstname, lastname, createdon createdon2, * from Person where firstname like '%J%' Order By createdon desc
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361956.html
標籤:sql sql-server 查询语句
