Database-Design

與子查詢結合使用時,IN 和 ORDER BY 關鍵字的正確用法是什麼?

  • March 8, 2022

ERD 用於我的簡單數據庫設計: ERD

我想根據父母的姓氏訂購孩子。我正在嘗試使用以下查詢:

SELECT * 
FROM children 
WHERE parent_id IN (SELECT parent_id  
                   FROM parent 
                   ORDER BY lastName ASC);

SELECT parent_id FROM parent ORDER BY lastName ASC按父母姓氏的順序返回 parent_ids(這是預期的行為)。parent_ids 根據他們的姓氏升序排列是154,156,155,157

但是,當用作子查詢時,排序顯然沒有正確使用。結果是: 查詢結果

如您所見,結果按 parent_id 的升序排列(不是孩子各自父母的姓氏)。

有沒有辦法在不改變我的設計的情況下正確地構造這個查詢?

謝謝你。

子選擇返回一個集合,它沒有順序,order by沒有用 - 它不會應用於最終結果集。如果您想通過“父母”的“姓氏”對“孩子”進行排序,則必須通過連接兩個關係將這些“姓氏”投影到外部選擇:

SELECT c.* 
FROM children c
INNER JOIN parent p
ON c.parent_id = p.parent_id
ORDER BY lastName ASC

引用自:https://dba.stackexchange.com/questions/308398