복붙노트

[SQL] SQL 쿼리 - UNION에서 주문을 사용하여

SQL

SQL 쿼리 - UNION에서 주문을 사용하여

어떻게 프로그래밍 종류의 두 테이블에서 데이터를 통합 쿼리 당겨 수 있습니까? 예를 들어,

SELECT table1.field1 FROM table1 ORDER BY table1.field1
UNION
SELECT table2.field1 FROM table2 ORDER BY table2.field1

예외가 발생합니다

참고 :이 MS 액세스 Jet 데이터베이스 엔진에서 시도되고있다

해결법

  1. ==============================

    1.때때로 당신은 UNION과 결합 될 필요가있는 각 섹션에 의해 ORDER이 필요합니다.

    때때로 당신은 UNION과 결합 될 필요가있는 각 섹션에 의해 ORDER이 필요합니다.

    이 경우

    SELECT * FROM 
    (
      SELECT table1.field1 FROM table1 ORDER BY table1.field1
    ) DUMMY_ALIAS1
    
    UNION ALL
    
    SELECT * FROM
    ( 
      SELECT table2.field1 FROM table2 ORDER BY table2.field1
    ) DUMMY_ALIAS2
    
  2. ==============================

    2.

    SELECT field1 FROM table1
    UNION
    SELECT field1 FROM table2
    ORDER BY field1
    
  3. ==============================

    3.나는이 설명의 좋은 일을 생각한다.

    나는이 설명의 좋은 일을 생각한다.

    다음은 ORDER BY 절을 사용하는 UNION 쿼리입니다 :

    select supplier_id, supplier_name
    from suppliers
    where supplier_id > 2000
    UNION
    select company_id, company_name
    from companies
    where company_id > 1000
    ORDER BY 2;
    

    열 이름 두 '선택'문장 사이에서 다르기 때문에, 상기 결과 집합 내의 그 위치에 의해 ORDER BY 절에서 열을 참조하는 것이 더 유리하다.

    이 예에서 우리는 "2 ORDER"에 의해 표시로, 오름차순으로 supplier_name / COMPANY_NAME에 의한 결과를 분류했습니다.

    supplier_name / COMPANY_NAME 필드는에 위치 # 2에 세트를 초래한다.

    여기에서 촬영 : http://www.techonthenet.com/sql/union.php

  4. ==============================

    4.구체적인 예를 사용 :

    구체적인 예를 사용 :

    SELECT name FROM Folders ORDER BY name
    UNION
    SELECT name FROM Files ORDER BY name
    

    파일 :

    name
    =============================
    RTS.exe
    thiny1.etl
    thing2.elt
    f.txt
    tcpdump_trial_license (1).zip
    

    폴더 :

    name
    ============================
    Contacts
    Desktop
    Downloads
    Links
    Favorites
    My Documents
    

    원하는 출력 : (제 1의 결과, 즉 제 첫번째 폴더 선택)

    Contacts
    Desktop
    Downloads
    Favorites
    Links
    My Documents
    f.txt
    RTMS.exe
    tcpdump_trial_license (1).zip
    thiny1.etl
    thing2.elt
    

    SQL은 원하는 결과를 달성하기 위해 :

    SELECT name 
    FROM (
        SELECT 1 AS rank, name FROM Folders
        UNION 
        SELECT 2 AS rank, name FROM Files) dt
    ORDER BY rank, name
    
  5. ==============================

    5.여기에 Northwind를 2007 예입니다 :

    여기에 Northwind를 2007 예입니다 :

    SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
    FROM [Product Orders]
    UNION SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
    FROM [Product Purchases]
    ORDER BY [Order Date] DESC;
    

    ORDER BY 절은 당신이 모든 unioning를 완료 한 후, 마지막 문이어야합니다. 당신은 노조 여러 세트 함께, 다음, 마지막으로 설정 한 후 ORDER BY 절을 넣을 수 있습니다.

  6. ==============================

    6.

    (SELECT table1.field1 FROM table1 
    UNION
    SELECT table2.field1 FROM table2) ORDER BY field1 
    

    작업? 세트를 생각 기억하십시오. 당신이 조합을 사용하고 다음에 작업을 수행하려는 세트를 가져옵니다.

  7. ==============================

    7.

    SELECT table1Column1 as col1,table1Column2 as col2
        FROM table1
    UNION
    (    SELECT table2Column1 as col1, table1Column2 as col2
             FROM table2
    )
    ORDER BY col1 ASC
    
  8. ==============================

    8.

    SELECT field1
    FROM ( SELECT field1 FROM table1
           UNION
           SELECT field1 FROM table2
         ) AS TBL
    ORDER BY TBL.field1
    

    (사용 ALIAS)

  9. ==============================

    9.이것은 내가 본 어리석은 일이지만, 그것을 작동, 당신은 결과를 주장 할 수 없습니다.

    이것은 내가 본 어리석은 일이지만, 그것을 작동, 당신은 결과를 주장 할 수 없습니다.

    SELECT *
    FROM (
        SELECT table1.field1 FROM table1 ORDER BY table1.field1
        UNION
        SELECT table2.field1 FROM table2 ORDER BY table2.field1
    ) derivedTable
    

    파생 테이블의 내부는 자체적으로 실행되지 않습니다,하지만 파생 테이블은 완벽하게 잘 작동한다. 나는 SS 2000, SS 2005 SS 2008 R2, 모든 세 가지 작업에서이 작업을 시도했습니다.

  10. ==============================

    10.이것은 수행하는 방법이다

    이것은 수행하는 방법이다

    select * from 
        (select top 100 percent pointx, pointy from point
         where pointtype = 1
         order by pointy) A
    union all
    select * from 
        (select top 100 percent pointx, pointy from point
         where pointtype = 2
         order by pointy desc) B
    
  11. ==============================

    11.나는이 질문에 대답 두 개의 서로 다른 패턴을 건너 온이 댓글 섹션을 찾아. 안타깝게도 SQL 2012, 두 번째 패턴은, 그래서 여기 내 "작업 주변에"하지 작업의 않습니다

    나는이 질문에 대답 두 개의 서로 다른 패턴을 건너 온이 댓글 섹션을 찾아. 안타깝게도 SQL 2012, 두 번째 패턴은, 그래서 여기 내 "작업 주변에"하지 작업의 않습니다

    이 발생할 수있는 가장 쉬운 경우이다. 많은 사용자가 지적처럼, 당신이 정말로 할 필요는 쿼리의 끝에 주문을 추가 할 것입니다

    SELECT a FROM table1
    UNION
    SELECT a FROM table2
    ORDER BY field1
    

    또는

    SELECT a FROM table1 ORDER BY field1
    UNION
    SELECT a FROM table2 ORDER BY field1
    

    실제로 까다로운 얻는 곳 여기입니다. SQL 2012을 사용하여, 나는 상단 게시물을 시도하고 일을하지 않습니다.

    SELECT * FROM 
    (
      SELECT table1.field1 FROM table1 ORDER BY table1.field1
    ) DUMMY_ALIAS1
    
    UNION ALL
    
    SELECT * FROM
    ( 
      SELECT table2.field1 FROM table2 ORDER BY table2.field1
    ) DUMMY_ALIAS2
    

    주석의 추천에 따라이 시도

    SELECT * FROM 
    (
      SELECT TOP 100 PERCENT table1.field1 FROM table1 ORDER BY table1.field1
    ) DUMMY_ALIAS1
    
    UNION ALL
    
    SELECT * FROM
    ( 
      SELECT TOP 100 PERCENT table2.field1 FROM table2 ORDER BY table2.field1
    ) DUMMY_ALIAS2
    

    이 코드는 컴파일을했다하지만 DUMMY_ALIAS1 및 DUMMY_ALIAS2는 주문이 사용할 수 없게 Select 문에 설립 우선합니다.

    내가 노동 조합을 사용하는 대신 쿼리가 개별적 한 다음 처리 실행할 제작되지 않은 내가이 일 것을 생각할 수있는 유일한 솔루션입니다. 그러니까 기본적으로, 노조 사용하지 않는 당신이 주문을 할 때

  12. ==============================

    12.순서를 사용하여 개별적으로 각각의 부분 집합은 순서를 얻을 수 있지만, 두 개의 테이블 연합 원하는 것이 무엇 전체 세트하지한다.

    순서를 사용하여 개별적으로 각각의 부분 집합은 순서를 얻을 수 있지만, 두 개의 테이블 연합 원하는 것이 무엇 전체 세트하지한다.

    당신은 하나 개의 명령 세트가이 같은 것을 사용해야합니다 :

    SELECT TOP (100) PERCENT field1, field2, field3, field4, field5 FROM 
    (SELECT table1.field1, table1.field2, table1.field3, table1.field4, table1.field5 FROM table1
    UNION ALL 
    SELECT table2.field1, table2.field2, table2.field3, table2.field4, table2.field5 FROM  table2) 
    AS unitedTables ORDER BY field5 DESC
    
  13. ==============================

    13.두 번째 표는 ORDER BY 절에서 테이블 이름을 포함 할 수 없습니다.

    두 번째 표는 ORDER BY 절에서 테이블 이름을 포함 할 수 없습니다.

    그래서...

    SELECT table1.field1 FROM table1 ORDER BY table1.field1
    UNION
    SELECT table2.field1 FROM table2 ORDER BY field1
    

    예외가 발생하지 않습니다

  14. ==============================

    14.필요한 경우 내부 정렬을 유지하기 :

    필요한 경우 내부 정렬을 유지하기 :

    SELECT 1 as type, field1 FROM table1 
    UNION 
    SELECT 2 as type, field1 FROM table2 
    ORDER BY type, field1
    
  15. ==============================

    15.

    (SELECT FIELD1 AS NEWFIELD FROM TABLE1 ORDER BY FIELD1)
    UNION
    (SELECT FIELD2 FROM TABLE2 ORDER BY FIELD2)
    UNION
    (SELECT FIELD3 FROM TABLE3 ORDER BY FIELD3) ORDER BY NEWFIELD
    

    이 시도. 그것은 나를 위해 일했습니다.

  16. ==============================

    16.SQL Server의 경우 2014 / 2012 / 기타 (체크인하지 않음)

    SQL Server의 경우 2014 / 2012 / 기타 (체크인하지 않음)

    SELECT * FROM 
    (
      SELECT table1.field1 FROM table1 ORDER BY table1.field1
    ) 
    as DUMMY_ALIAS1
    
    UNION ALL
    
    SELECT * FROM
    ( 
      SELECT table2.field1 FROM table2 ORDER BY table2.field1
    ) 
    as DUMMY_ALIAS2
    
  17. from https://stackoverflow.com/questions/213851/sql-query-using-order-by-in-union by cc-by-sa and MIT license