멱등 원 삽입을 수행하는이 github SQL 코드 예제를 발견했습니다. 내가 원하는 방식으로 정확하게 작동합니다. 나는 조금 혼란 스럽기 때문에 EXISTS를 사용하고 싶지 않습니다. 동일한 작업을 조인으로 코딩 할 수 있습니까? https://github.com/imtiazahmad007/SQL-Tips-Techniques/blob/master/Idempotent_Postgres_Inserts.sqlSQL - 멱등 원 대신에 EXISTS 및 NOT EXISTS 대신 조인을 사용하는 방법
INSERT INTO users_articles (date, user_id, hit_count)
SELECT a.date, a.user_id, sum(a.article_id as hits)
from (
select t.* from users_article_details AS t
WHERE NOT EXISTS (
SELECT 1
FROM do_not_email_users_tbl
WHERE email = t.email
LIMIT 1
)) a
WHERE NOT EXISTS
(SELECT 1 from users_articles b
WHERE b.date = a.date)
GROUP BY date, user_id
어쨌든 잘 쓰여지지 않습니다. 너무 많은 중첩 쿼리, 테이블 별칭의 일관성없는 사용, "안타"가 왜 있는지 알지 못합니다. 존재하지 않는 것은 문제 중 가장 적은 것입니다. 개인적으로 나는 질문의 전제에 동의하지 않습니다. 존재하지 않는 것은 표준적이고 광범위하게 발생하는 SQL입니다. 특히 결과를 달성하는 매우 효율적인 방법입니다 (특히 하위 쿼리가 기본 쿼리에서 전달 된 값에 대해 여러 행을 반환 할 수있는 경우). 쿼리는 옵티 마이저에 의해 효율적인 anti-join으로 변환 될 것입니다. –
prothid와 Bob Jarvis의 답변을 프로파일 링해야합니다. 다른 RDBMS는 다른 성능 특성을 가지며, 하나는 다른 성능 특성보다 훨씬 느릴 수 있습니다. –
Oracle 또는 Postgres 용입니까? 태그가 혼란 스럽습니다. –