Windows 7 x64에서 Postgres 9.1.3 32 비트를 실행 중입니다. (64 개 비트 포스트 그레스와 호환에는 윈도우 PostGIS와 자료가 없기 때문에 32 비트를 사용한다.) (편집 :. PostGIS와 2.0로,이 창에 포스트 그레스 64 비트와 호환)Postgres LEFT JOIN이 왼쪽 테이블보다 많은 행을 생성 중입니다.
을 나는 쿼리가 그 왼쪽은 임시 테이블로 테이블 (consistent.master
)을 조인 한 다음 결과 데이터를 세 번째 테이블 (consistent.masternew
)에 삽입합니다.
이 값은 left join
이므로 결과 테이블의 쿼리에서 왼쪽 테이블과 같은 수의 행이 있어야합니다. 그러나 이것을 실행하면
SELECT count(*)
FROM consistent.master
나는 2085343
이됩니다. 하지만 이것을 실행하면 :
SELECT count(*)
FROM consistent.masternew
나는 2085703
이됩니다.
masternew
의 행 수가 master
이상일 수있는 방법은 무엇입니까? masternew
은 master
과 같은 행 수를 가져야하지, 쿼리의 왼쪽 테이블?
다음은 쿼리입니다. master
및 masternew
테이블은 동일하게 구조화되어야합니다.
--temporary table created here
--I am trying to locate where multiple tickets were written on
--a single traffic stop
WITH stops AS (
SELECT citation_id,
rank() OVER (ORDER BY offense_timestamp,
defendant_dl,
offense_street_number,
offense_street_name) AS stop
FROM consistent.master
WHERE citing_jurisdiction=1
)
--Here's the insert statement. Below you'll see it's
--pulling data from a select query
INSERT INTO consistent.masternew (arrest_id,
citation_id,
defendant_dl,
defendant_dl_state,
defendant_zip,
defendant_race,
defendant_sex,
defendant_dob,
vehicle_licenseplate,
vehicle_licenseplate_state,
vehicle_registration_expiration_date,
vehicle_year,
vehicle_make,
vehicle_model,
vehicle_color,
offense_timestamp,
offense_street_number,
offense_street_name,
offense_crossstreet_number,
offense_crossstreet_name,
offense_county,
officer_id,
offense_code,
speed_alleged,
speed_limit,
work_zone,
school_zone,
offense_location,
source,
citing_jurisdiction,
the_geom)
--Here's the select query that the insert statement is using.
SELECT stops.stop,
master.citation_id,
defendant_dl,
defendant_dl_state,
defendant_zip,
defendant_race,
defendant_sex,
defendant_dob,
vehicle_licenseplate,
vehicle_licenseplate_state,
vehicle_registration_expiration_date,
vehicle_year,
vehicle_make,
vehicle_model,
vehicle_color,
offense_timestamp,
offense_street_number,
offense_street_name,
offense_crossstreet_number,
offense_crossstreet_name,
offense_county,
officer_id,
offense_code,
speed_alleged,
speed_limit,
work_zone,
school_zone,
offense_location,
source,
citing_jurisdiction,
the_geom
FROM consistent.master LEFT JOIN stops
ON stops.citation_id = master.citation_id
는 중요한 경우에, 나는 VACUUM FULL ANALYZE
을 실행하고 두 테이블을 인덱싱했다. 정확한 명령은 확실하지 않고 pgAdmin III를 통해 수행했습니다.
고맙습니다. 그것이 바로 그 것이다. LEFT JOIN은 조인의 * 최소 * 수가 왼쪽 표의 행 수를 의미합니다. –