2016-11-02 2 views
-1

안녕하세요. 여기에 item about insert if not exists이 있습니다. 궁금한 점 중 하나는 최신 품목을 CompResults에서 ResultDate의 주문을 사용하여 Competitors 테이블에 삽입하려는 경우 어떻게해야합니까?SQL : 조건부 삽입

오류 발생 : SELECT DISTINCT가 지정된 경우 ORDER BY 항목이 선택 목록에 나타나야합니다.

INSERT Competitors (cName) 
SELECT 
    A.Name 
FROM 
    CompResults A INNER JOIN 
    (
     SELECT 
      CR.Name, 
      MAX(CR.ResultsDate) MaxResultsDate 
     FROM 
      CompResults CR 
    ) B ON A.Name = B.Name AND A.ResultsDate = B.MaxResultsDate 
WHERE 
    NOT EXISTS (SELECT 1 FROM Competitors c 
       WHERE c.cName = A.Name) 
+0

제공하기를 사용할 수 있습니다 e 테이블 구조 – Beginner

+1

어느 RDBMS를 사용하고 있는지 알 수 있습니다. – Strawberry

+0

1) ORDER BY는 INSERT 할 때 의미가 없습니다. 2) 오류 메시지에 모두 나와 있습니다. – jarlh

답변

0

사용 Row_Number 각 항목 또한

Insert into Competitors(col1,col2..) 
Select col1,col2,.. 
(
Select row_number()Over(partition by Name order by ResultDate desc) Rn, * 
From CompResults cr 
NOT EXISTS (SELECT 1 FROM Competitors c 
       WHERE cr.Name = c.cName) 

) a 
Where Rn = 1 
0

아래의 같은 수의 최신 기록을 얻을 수 있습니다 SQL 서버
를 사용하는 것은 그래서 당신은 하위 쿼리를

INSERT Competitors (cName) 
select Name 
from (
SELECT cr.Name,max(cr.ResultDate) 
FROM CompResults cr 
WHERE NOT EXISTS (SELECT * FROM Competitors c 
WHERE cr.Name = c.cName) group BY cr.name) as t order by ResultDate 
1

안녕 당신이 select 문에서 필드로 순서를 사용해야합니다 나는 당신이 생각 :