【问题标题】:the order by clause, there is no country_name in the locations table, how can the parents query order by country_name?order by 子句,locations 表中没有 country_name,父母如何查询 order by country_name?
【发布时间】:2018-03-23 20:01:34
【问题描述】:
desc locations

Name           Null?    Type         
-------------- -------- ------------ 
LOCATION_ID    NOT NULL NUMBER(4)    
STREET_ADDRESS          VARCHAR2(40) 
POSTAL_CODE             VARCHAR2(12) 
CITY           NOT NULL VARCHAR2(30) 
STATE_PROVINCE          VARCHAR2(25) 
COUNTRY_ID              CHAR(2)      

desc countries

Name         Null?    Type         
------------ -------- ------------ 
COUNTRY_ID   NOT NULL CHAR(2)      
COUNTRY_NAME          VARCHAR2(40) 
REGION_ID             NUMBER       

select country_id, city, state_province
from locations l
order by(select country_name
         from countries c 
         where l.country_id=c.country_id)

【问题讨论】:

    标签: sql oracle subquery scalar


    【解决方案1】:

    加入表,然后应用 ORDER BY:

    select l.country_id, l.city, l.state_province
    from locations l join countries c on c.country_id = l.country_id
    order by c.country_name;
    

    【讨论】:

      【解决方案2】:

      order by 子句使用相关子查询。对于选择的每一行,根据匹配的 ID 选择国家名称,然后按该 ID 对查询进行排序。

      可以说,编写此查询的更优雅的方式是使用join,这可能更直观:

      SELECT   l.country_id, city, state_province
      FROM     locations l
      JOIN     countries c ON l.country_id = c.country_id
      ORDER BY c.country_name
      

      【讨论】:

      • @XiaomengSu 乐于助人。如果这个答案对你有帮助,你应该考虑投票或接受它。
      【解决方案3】:
      SELECT L.COUNTRY_ID, CITY, STATE_PROVINCE 
      FROM LOCATIONS L 
      INNER JOIN COUNTRIES 
      ON COUNTRIES.COUNTRY_ID = L.COUNTRY_ID 
      ORDER BY COUNTRIES.COUNTRY_NAME
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        相关资源
        最近更新 更多