2010-06-18 3 views
1

위키 시스템에는 자신의 테이블에 여러 개의 수정본이있는 중앙 테이블 Article이 있습니다. 개정은 각각 created_at 시간 및 날짜 열을 포함합니다.가장 일치하는 행에 조인 할 SQL 문

가장 최근의 Revision 이름 필드에서 비정규 화 된 필드 sort_name을 포함하도록 기사를 업데이트하고 싶습니다.

각 기사의 sort_name 필드에 가장 최근의 Revision 's name 필드를 기입하기 위해 어떤 SQL 명령을 사용할 수 있습니까?

가치가있는 부분에 대해서는 PostgreSQL을 사용하고 있습니다. 당신이 조금 변경해야하지만, 수 있도록 PostgreSQL의 구문

+0

는 오히려이 총 단어 문제를 만드는 것보다, 당신이 우리에게 아스키 테이블 또는 생성 문을 보여주는 오프 더 나은 것. 또한 유용한 것을 얻을 가능성이 훨씬 더 높습니다. –

답변

1

테이블 구조가 문제를 더 잘 정의하는 데 도움이됩니다. 포스트 그레스를 들어

:

UPDATE ARTICLES ar 
SET sort_name = (SELECT name FROM Revisions rev 
       WHERE rev.article_id = ar.article_id 
       ORDER BY rev.createdate DESC LIMIT 1) 
2

100 % 확인, 아이디어는 다음과 같습니다

UPDATE Articles 
SET sort_name = (SELECT FIRST(name) 
       FROM Revisions 
       WHERE Revisions.id = Articles.id 
       ORDER BY created_at DESC) 
1

난 당신이 가장 최근의 개정에 가입하려면, 제대로 이해합니다. 업데이트를 수행하기 위해 가장 최근 버전을 선택하는 최적화 된 방법이 있습니다. 이게 네가 찾고 있는게 아니라면 알려줘. PostgreSQL에 익숙하지 않기 때문에 T-SQL 용으로 작성되었습니다.

UPDATE ARTICLES 
SET SORT_NAME = lastHist.NAME 
FROM ARTICLES AS t 
    --Join the the most recent history entries 
     INNER JOIN REVISION lastHis ON t.ID = lastHis.FK_ID 
     --limits to the last history in the WHERE statement 
      LEFT JOIN REVISION his2 on lastHis.FK_ID = his2.FK_ID and lastHis.CREATED_TIME < his2.CREATED_TIME 
WHERE his2.ID is null