복붙노트

[SQL] 절 "로"MySQL은

SQL

절 "로"MySQL은

나는 "로"와보기를 만들 수 MySQL을 사용하기 위해 노력하고있어 절

WITH authorRating(aname, rating) AS
   SELECT aname, AVG(quantity)
   FROM book
   GROUP BY aname

MySQL은이 지원 같은 그러나 그것은 보이지 않는다.

나는이 꽤 표준라고 생각하고 나는 오라클이 지원 확신합니다. 은 "WITH"절을 사용하여 MySQL을 강제로 어쨌든 있나요? 나는의 MyISAM과 InnoDB의 엔진을 시도했습니다. 이 두 가지 작동하지 않습니다.

해결법

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

    1.업데이트 : MySQL의 8.0 마침내 재귀 CTE를 포함한 공통 테이블 표현식의 기능을지고 있습니다.

    업데이트 : MySQL의 8.0 마침내 재귀 CTE를 포함한 공통 테이블 표현식의 기능을지고 있습니다.

    여기에 블로그를 발표 것 : http://mysqlserverteam.com/mysql-8-0-labs-recursive-common-table-expressions-in-mysql-ctes/

    아래는 내가 원래 2008 년에 쓴 내 이전 대답이다.

    MySQL의 5.x를은 SQL-99에 정의 된 구문으로도 불리는 공통 테이블 식을 사용하여 쿼리를 지원하지 않습니다.

    이 월 2006 MySQL을위한 기능 요청하고있다 : http://bugs.mysql.com/bug.php?id=16244

    공통 테이블 표현식을 지원하는 다른 RDBMS 제품 :

    (2 월 2014대로) WITH 절에 대한 지원이 부족 다른 데이터베이스 :

  2. ==============================

    2.당신은 이런 일에 관심이있을 수 있습니다

    당신은 이런 일에 관심이있을 수 있습니다

    select * from (
        select * from table
    ) as Subquery
    
  3. ==============================

    3.당신은 구문 권리를 가지고있다 :

    당신은 구문 권리를 가지고있다 :

    WITH AuthorRating(AuthorName, AuthorRating) AS
       SELECT aname         AS AuthorName,
              AVG(quantity) AS AuthorRating
       FROM Book
       GROUP By Book.aname
    

    다른 언급하지만, MySQL은이 명령을 지원하지 않습니다. 와 함께 SQL에서 추가되었다 : 1999; 2008 : SQL 표준의 최신 버전은 SQL이다. 위키 백과에 1999의 다양한 기능 : 당신은 지원 SQL이 데이터베이스에 대한 좀 더 많은 정보를 찾을 수 있습니다.

    오라클, SQL 서버 (최근), 그리고 DB2와 같은 상용 데이터베이스는 좀 더 밀접하게 그들을 따라 한 반면, MySQL은 전통적으로 SQL 표준에 대한 지원에 조금 느껴지있다. PostgreSQL은 꽤 표준뿐만 아니라 준수 일반적이다.

    당신은 MySQL의 로드맵을보고 할 수 있습니다; 이 기능이 지원 될 수 때 나는 완전하게 확신하지만, 읽을 수있는 롤 업 쿼리를 만들기위한 좋아요.

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

    4.오라클은 함께 지원한다.

    오라클은 함께 지원한다.

    그것은 다음과 같이 보일 것이다.

    WITH emps as (SELECT * FROM Employees)
    SELECT * FROM emps WHERE ID < 20
    UNION ALL
    SELECT * FROM emps where Sex = 'F'
    

    @ysth WITH은 일반적으로 검색에서 제외 일반적인 단어이기 때문에 구글 어렵다.

    당신은 하위 쿼리 인수 분해가 어떻게 작동하는지 확인하기 위해 SELECT 문서를보고 싶어.

    나는 이것이 OP에 응답하지 않습니다 알고 있지만 내가 시작했을 수 ysth 혼란을 청소하고있다.

  5. ==============================

    5.MariaDB 지금 WITH를 지원하고있다. 지금은 MySQL은 없습니다. https://mariadb.com/kb/en/mariadb/with/

    MariaDB 지금 WITH를 지원하고있다. 지금은 MySQL은 없습니다. https://mariadb.com/kb/en/mariadb/with/

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

    6.@Mosty Mostacho에서 답변을 구축, 여기 당신이 항목을 테이블에 존재하지, 및 다른 데이터베이스에 있지 않는 것을 결정하는 특정의 경우에, MySQL은 뭔가 상응 할 수있는 방법입니다.

    @Mosty Mostacho에서 답변을 구축, 여기 당신이 항목을 테이블에 존재하지, 및 다른 데이터베이스에 있지 않는 것을 결정하는 특정의 경우에, MySQL은 뭔가 상응 할 수있는 방법입니다.

    select col1 from (
       select 'value1' as col1 union
       select 'value2' as col1 union
       select 'value3' as col1
    ) as subquery
    left join mytable as mytable.mycol = col1
    where mytable.mycol is null
    order by col1
    

    당신은 인용을 선택 노조 절에 값 목록을 변환하는 매크로 기능이있는 텍스트 편집기를 사용할 수 있습니다.

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

    7.혹시 임시 테이블을 시도 해 봤나? 이것은 내 문제를 해결 :

    혹시 임시 테이블을 시도 해 봤나? 이것은 내 문제를 해결 :

    create temporary table abc (
    column1 varchar(255)
    column2 decimal
    );
    insert into abc
    select ...
    or otherwise
    insert into abc
    values ('text', 5.5), ('text2', 0815.8);
    

    그럼 당신은이 세션에서 모든 선택이 테이블을 사용할 수 있습니다 :

    select * from abc inner join users on ...;
    
  8. ==============================

    8.

       WITH authorRating as (select aname, rating from book)
       SELECT aname, AVG(quantity)
       FROM authorRating
       GROUP BY aname
    
  9. from https://stackoverflow.com/questions/324935/mysql-with-clause by cc-by-sa and MIT license