[SQL] MySQL의 : 절 제한의 FROM에서 하위 쿼리와보기
SQLMySQL의 : 절 제한의 FROM에서 하위 쿼리와보기
5.0에서 이유를 다음과 같은 오류가 FROM 절에서 하위 쿼리와보기를 만들려고 할 때 발생합니까?
이 MySQL의 엔진의 한계가 있다면, 왜 아직이 기능을 구현하지 않은?
또한, 이러한 제한에 대한 좋은 대안은 무엇인가?
FROM 절에 서브 쿼리를 사용하지 않고 표현 될 수없는 쿼리가되는 대안은 FROM 절에있는 하위 쿼리에 대한 그 일이 있습니까 또는?
예 쿼리 (주석에 묻혔다) :
SELECT temp.UserName
FROM (SELECT u1.name as UserName, COUNT(m1.UserFromId) as SentCount
FROM Message m1, User u1
WHERE u1.uid = m1.UserFromId
Group BY u1.name HAVING SentCount > 3 ) as temp
해결법
-
==============================
1.쿼리는 그대로 쓸 수 없습니다 :
쿼리는 그대로 쓸 수 없습니다 :
SELECT u1.name as UserName from Message m1, User u1 WHERE u1.uid = m1.UserFromID GROUP BY u1.name HAVING count(m1.UserFromId)>3
MySQL은 서브 쿼리로 알려진 속도 문제와 그해야 또한 도움
-
==============================
2.저도 같은 문제가 있었다. 나는 최근 연도의 정보를 표시 여기에 원래 쿼리의 2011 년 2009 년에서 레코드가있는 테이블에서 할 수있는 뷰를 만들고 싶었 :
저도 같은 문제가 있었다. 나는 최근 연도의 정보를 표시 여기에 원래 쿼리의 2011 년 2009 년에서 레코드가있는 테이블에서 할 수있는 뷰를 만들고 싶었 :
SELECT a.* FROM a JOIN ( SELECT a.alias, MAX(a.year) as max_year FROM a GROUP BY a.alias ) b ON a.alias=b.alias and a.year=b.max_year
솔루션의 개요 :
여기에 솔루션 쿼리는 다음과 같습니다
CREATE VIEW v_max_year AS SELECT alias, MAX(year) as max_year FROM a GROUP BY a.alias; CREATE VIEW v_latest_info AS SELECT a.* FROM a JOIN v_max_year b ON a.alias=b.alias and a.year=b.max_year;
그것은 속도 저하의 많은없이, MySQL은 5.0.45에서 잘 작동 (실행 비교 원래 하위 쿼리 어떤 의견없이 선택).
-
==============================
3.알려진 문제로 나타납니다.
알려진 문제로 나타납니다.
http://dev.mysql.com/doc/refman/5.1/en/unnamed-views.html
http://bugs.mysql.com/bug.php?id=16757
(외부 왼쪽)이 조인과는 어떤 종류의 (NOT) NULL IS로 많은 IN 쿼리 재 작성 될 수 있습니다. 예를 들면
SELECT * FROM FOO WHERE ID IN (SELECT ID FROM FOO2)
같이 다시 쓸 수있다
SELECT FOO.* FROM FOO JOIN FOO2 ON FOO.ID=FOO2.ID
또는
SELECT * FROM FOO WHERE ID NOT IN (SELECT ID FROM FOO2)
될 수 있습니다
SELECT FOO.* FROM FOO LEFT OUTER JOIN FOO2 ON FOO.ID=FOO2.ID WHERE FOO.ID IS NULL
-
==============================
4.각 하위 쿼리에 대한 뷰를 생성하는 길을 가야하는 것입니다. 매력처럼 작동을 얻었다.
각 하위 쿼리에 대한 뷰를 생성하는 길을 가야하는 것입니다. 매력처럼 작동을 얻었다.
-
==============================
5.당신은 당신이 사용하고 만들고있는보기에 그에 가입하려는 하위 쿼리에 대해 별도의 뷰를 생성하여이 문제를 해결할 수 있습니다. 다음은 그 예이다 : http://blog.gruffdavies.com/2015/01/25/a-neat-mysql-hack-to-create-a-view-with-subquery-in-the-from-clause/
당신은 당신이 사용하고 만들고있는보기에 그에 가입하려는 하위 쿼리에 대해 별도의 뷰를 생성하여이 문제를 해결할 수 있습니다. 다음은 그 예이다 : http://blog.gruffdavies.com/2015/01/25/a-neat-mysql-hack-to-create-a-view-with-subquery-in-the-from-clause/
이것은 당신이 매우 높다 어쨌든 그것을 재사용 할 수 있습니다로 매우 편리하고 당신이 당신의 SQL DRY을 유지하는 데 도움이됩니다.
from https://stackoverflow.com/questions/206062/mysql-view-with-subquery-in-the-from-clause-limitation by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] IS NULL = NULL과의 차이가 있습니까 (0) | 2020.03.26 |
---|---|
[SQL] GROUP BY / SQL의 집계 함수 혼란 (0) | 2020.03.26 |
[SQL] SQL 서버 - 어떻게 저장 프로 시저가 완료 될 때까지 테이블을 잠급니다 (0) | 2020.03.26 |
[SQL] SQL에서 증가 날짜의 결과 세트를 생성 (0) | 2020.03.26 |
[SQL] 어떻게 동적 SQL 문에서 테이블 변수를 사용하는 방법? (0) | 2020.03.26 |