0
行的順序我有2個表的Postgres如何保持使用CTE
students:
id | name | age
1 abc 20
2 xyz 21
scores:
id | studentid | marks
1 1 20
2 2 22
3 2 20
4 1 22
5 1 20
其中studentid
是外鍵的學生表
當做
select studentid
from scores
where marks=20;
我得到以下結果 1, 2, 1
但是如果wan t爲學生姓名的名字,當我做了加入使用
select t1.name
from students t1
inner join scores t2 on t1.id = t2.studentid
where t2.marks=20;
我得到xyz,abc,abc
雖然輸出中正確的是我有什麼辦法可以維持在得分在得分表中列出的順序?我應該得到abc,xyz,abc
作爲輸出。我也嘗試使用子查詢以及
SELECT name
FROM students
WHERE ID IN (select studentid from scores where marks=20) ;
但這也沒有給我正確的順序。如何使用CTE(公用表表達式)實現這一點?我試過follownig CTE,但它沒有工作
with cte as(
select t2.id, t1.name
from students t1
inner join scores t2 on t1.id = t2.studentid
where t2.marks=20)
select name from cte order by id
的*** ***唯一的方式得到一個保證的順序是使用'order by'。我不清楚哪個是你的命令,但可能是't2.id'命令? –
沒有訂單將按任何列升序或降序排序。正如你所看到的,我想在分數表中保持秩序。學生ID 1,3,5。這是一個巧合,1,3,5按升序排列。 – aaj
沒有「分數表中的訂單」這樣的事情。關係數據庫中的行不是***「排序」的。在您的結果中唯一的(真的:只有**)**方式才能獲得定義的訂單,方法是使用'order by'。 –