我正在解決這個PostreSQL 練習(在鏈接中你可以找到陳述句和資料庫圖表),我提出了這個解決方案:
SELECT mem.firstname || ' ' || mem.surname AS member, fac.name AS facility
FROM
cd.members mem
INNER JOIN cd.bookings book
ON mem.memid = book.memid
INNER JOIN cd.facilities fac
ON book.facid = fac.facid
WHERE
fac.facid IN (0,1)
ORDER BY mem.firstname, fac.name
這實際上不起作用,因為我仍然會得到重復,所以我決定查看提供的解決方案:
select distinct mems.firstname || ' ' || mems.surname as member, facs.name as facility
from
cd.members mems
inner join cd.bookings bks
on mems.memid = bks.memid
inner join cd.facilities facs
on bks.facid = facs.facid
where
facs.name in ('Tennis Court 2','Tennis Court 1')
order by member, facility
有了這些資訊,我決定將DISTINCT子句添加到我的解決方案中,使其看起來像這樣:
SELECT DISTINCT(mem.firstname || ' ' || mem.surname) AS member, fac.name AS facility
FROM
cd.members mem
INNER JOIN cd.bookings book
ON mem.memid = book.memid
INNER JOIN cd.facilities fac
ON book.facid = fac.facid
WHERE
fac.facid IN (0,1)
ORDER BY mem.firstname, fac.name
但是,我收到以下錯誤
錯誤:對于 SELECT DISTINCT,ORDER BY 運算式必須出現在選擇串列中位置:313
鑒于此,正如您所看到的,除了最后一行之外,所提供的解決方案與我對問題的第二個看法沒有太大不同:雖然我要求 SQL 按參考其表的列(mem.firstname、fac.name)進行排序,解決方案只參考他們的別名(成員、設施),我有一些問題:
- 當我參考表與僅使用別名時,ORDER BY子句的作業方式有何不同?我認為使用列的別名不能像表別名那樣用于查詢。
- DISTINCT子句在每種情況下如何作業?
uj5u.com熱心網友回復:
您ORDER BY mem.firstname,而解決方案使用member. 這里重要的是,member不僅包含 that firstname,而且實際上是錯誤訊息提示的確切內容:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
解釋:在選擇不同的值時,您GROUP BY必須截然不同的所有運算式。
因此,錯誤的原因是您告訴它僅按名字排序,并且該屬性必須是您DISTINCT在SELECT子句中所說的內容。但它不是,它部分存在,但還有:' ' || mems.surname
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400980.html
標籤:sql PostgreSQL的 内部联接 清楚的 别名
