因為我從之前的帖子中得到了幫助,所以我能夠得到一個正確的代碼:
select *
from (
select e.employeename, s.skilldescription,
count(*) over(partition by e.employeeid) as count
from employeeskills_t k
inner join employee_t e on k.employeeid = e.employeeid
inner join skill_t s on k.skillid=s.skillid
) t
where count> 1
order by employeename, skilldescription
但它會生成一個額外的列,count我不需要。
我不太了解SQL,所以我不知道是否存在命令。
uj5u.com熱心網友回復:
- 由于您使用了 windows 功能,您將看到每一行的結果,因此該列將保留在那里
- 您有兩個選項,或者使用
group by,您可以使用子句過濾計數值,having或者您可以使用 windows 函式,然后僅選擇您需要的相關列:
with main as (
select e.employeename, s.skilldescription,
count(*) over(partition by e.employeeid) as count
from employeeskills_t k
inner join employee_t e on k.employeeid = e.employeeid
inner join skill_t s on k.skillid=s.skillid
)
select
e.employeename,
s.skilldescription,
where count> 1
order by employeename, skilldescription
版本 2:
select e.employeename
from employeeskills_t k
inner join employee_t e on k.employeeid = e.employeeid
inner join skill_t s on k.skillid=s.skillid
group by 1
having count(e.employeenam) > 1
uj5u.com熱心網友回復:
如果您正在尋找employeename、skilldescription 的不同值且emp id 的數量超過一個,則可以使用group by & having 來實作相同的目的。請檢查以下是否有幫助。
select e.employeename, s.skilldescription
from employeeskills_t k
inner join employee_t e on k.employeeid = e.employeeid
inner join skill_t s on k.skillid=s.skillid
group by e.employeename, s.skilldescription
having COUNT(e.employeeid) > 1
order by employeename, skilldescription;
uj5u.com熱心網友回復:
默認情況下,為您提供子句select *中可用的所有列。from
在這里,from子句本身就是一個子查詢,它回傳 3 列;第三列是計數,在外部查詢中需要它進行過濾(即“last”where子句)。
由于我們不能不從子查詢中回傳該列,因此我們可以在輸出中忽略它。這意味著我們需要列舉我們想要的列,而不是盲目地使用*.
外部查詢中的列與 subuqery 回傳的列具有相同的名稱。這里只需要兩列,所以寫起來很短:
改變它select * from (...) t where ...
... 至 :select employeename, skilldescription from (...) t where ...
旁注:一些資料庫支持特定語法來選擇除少數命名列之外的所有列。BigQuery 有SELECT * EXCEPT- 但不幸的是,這不是其他 RDBMS 中廣泛可用的功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523921.html
標籤:sql子查询
上一篇:為什么我沒有得到這個塊的結果?
下一篇:如果選擇回傳0則執行另一個選擇
