동일한 하위 쿼리를 두 번 사용하는 SQL 스크립트 (현재 SQLite에 대해 실행되지만 모든 DB 엔진에 대해 작동해야 함)를 사용하고 많은 레코드를 가져올 수 있기 때문에 (테이블에 2 백만 개의 행이 있음) 한 번만 부탁하고 싶습니다. 쿼리의IN 절에 대해이 하위 쿼리를 반복하지 않으려면 어떻게해야합니까?
단축 된 의사 버전은 다음과 같습니다
SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])
난 그냥 스퀘어 등의 열 이름을 지정하지 않고 함께/괄호없이와/다양한 방법으로 (에서 이름 (
sq
)를 사용하여 시도
) 그러나 아무 소용이 없습니다.
이 서브 쿼리를 반복하려면 에이 실제로 있습니까?
명확한 설명 : 나는 이 무엇을 할 수 있는지의 작은 데모로 파이썬과 sqlite가이 일을하고있다,하지만 난 가능한 한 내 확장 할 수있는 솔루션뿐만 아니라 수와 같은 약간의 수정을하고 싶습니다. 실제 상황에서는 데이터베이스에 2 천만 개의 행이 있지만 내 예제에는 더미 데이터가있는 행이 10 개뿐입니다. 따라서 코드는 MySQL에서 완벽하게 최적화됩니다. 즉,에 대해 특별히 으로 최적화 할 필요는 없습니다. 그러나 제가 말했듯이, 수정이 덜 필요할수록 좋습니다.
SQLite는 말할 수 없지만 대부분의 알맞은 RDBMS에서는이를 최적화 할 수 있어야합니다. 일부 제품 (예 : SQL Server, PostgreSQL 등)의 경우 공통 테이블 표현식을 사용하여 텍스트가 한 번만 표시되도록 할 수 있습니다. –
@Damien_The_Unbeliever : SQLlite는 한 손으로 작고 복잡하고 장기간 실행되는 OLAP 유형 쿼리를 지원할 필요가없는 임베디드 데이터베이스이기 때문에 중량 최적화 프로그램은 코드 증가 및 실행 시간 증가에 실제로 가치가 없을 것입니다 짧은 임의 (ad-hoc) 쿼리 –