sql-server 여러개 - SQL Server로 INNER JOIN을 사용하여 삭제하는 방법?




다중 테이블 (13)

SQL Server 2008의 INNER JOIN 을 사용하여 삭제하려고합니다.

하지만이 오류가 발생합니다.

메시지 156, 수준 15, 상태 1, 줄 15
'INNER'키워드 근처의 구문이 잘못되었습니다.

내 코드 :

DELETE FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

Answers

다음 쿼리를 시도하십시오.

DELETE WorkRecord2, Employee 
FROM WorkRecord2 
INNER JOIN Employee ON (tbl_name.EmployeeRun=tbl_name.EmployeeNo)
WHERE tbl_name.Company = '1' 
AND tbl_name.Date = '2013-05-06';

 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'

다음은 현재 삭제 또는 업데이트에 사용되는 항목입니다.

DELETE FROM      w
FROM             WorkRecord2   w,
                 Employee      e
WHERE            w.EmployeeRun = e.EmployeeNo
             AND w.Company = '1' 
             AND w.Date = '2013-05-06'

CTE 사용하는 또 다른 방법.

;WITH cte 
     AS (SELECT * 
         FROM   workrecord2 w 
         WHERE  EXISTS (SELECT 1 
                        FROM   employee e 
                        WHERE  employeerun = employeeno 
                               AND company = '1' 
                               AND date = '2013-05-06')) 
DELETE FROM cte 

참고 : deleteCTE 안에서 JOIN 사용할 수 없습니다.


해봐, 도움이 될거야.

 DELETE WorkRecord2 
          FROM WorkRecord2 
    INNER JOIN Employee 
            ON EmployeeRun=EmployeeNo
         WHERE Company = '1' 
           AND Date = '2013-05-06';

이것이 당신에게 도움이 될 수 있음 -

DELETE FROM dbo.WorkRecord2 
WHERE EmployeeRun IN (
    SELECT e.EmployeeNo
    FROM dbo.Employee e
    WHERE ...
)

또는 이것을 시도하십시오 -

DELETE FROM dbo.WorkRecord2 
WHERE EXISTS(
    SELECT 1
    FROM dbo.Employee e
    WHERE EmployeeRun = e.EmployeeNo
        AND ....
)

이 시도:

DELETE FROM WorkRecord2 
       FROM Employee 
Where EmployeeRun=EmployeeNo
      And Company = '1' 
      AND Date = '2013-05-06'

삭제할 테이블을 지정해야합니다. 여기에는 별칭이있는 버전이 있습니다.

DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
  ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

이 쿼리는 한 번에 두 테이블에서 레코드를 삭제하는 간단한 쿼리입니다.

DELETE table1.* ,
       table2.* 
FROM table1 
INNER JOIN table2 ON table1.id= table2.id where table1.id ='given_id'

이 버전이 작동해야합니다.

DELETE WorkRecord2
FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
Where Company = '1' AND Date = '2013-05-06'

CompanyDate 대한 테이블을 지정하지 않으면이를 수정해야 할 수 있습니다.

MERGE 사용하는 표준 SQL :

MERGE WorkRecord2 T
   USING Employee S
      ON T.EmployeeRun = S.EmployeeNo
         AND Company = '1'
         AND Date = '2013-05-06'
WHEN MATCHED THEN DELETE;

@Devart의 대답은 표준 SQL이지만 불완전하지만 다음과 같이 보일 것입니다 :

DELETE 
  FROM WorkRecord2
  WHERE EXISTS ( SELECT *
                   FROM Employee S
                  WHERE S.EmployeeNo = WorkRecord2.EmployeeRun
                        AND Company = '1'
                        AND Date = '2013-05-06' );

위의 내용에서 주목해야 할 중요한 점은 두 번째 예제에서 스칼라 하위 쿼리가 필요하므로 단일 테이블을 대상으로 삭제가 명확하다는 것입니다.

내게는 다양한 독점적 구문 응답을 읽고 이해하기가 더 어렵습니다. 내가 생각하기에는 @frans eilering, 즉 코드를 작성하는 사람이 코드를 읽고 유지할 사람에 대해 반드시 신경을 쓰는 것은 아니라는 것이 가장 좋습니다.


그것은해야한다:

DELETE zpost 
FROM zpost 
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = "first"       

십자가를 시험해 보았지만 훌륭하게 작동하지만 조금 더 오래 걸립니다. 속도를 유지하고 추가 기록을 삭제 한 최대 및 추가 그룹을 갖도록 행 열을 조정했습니다.

조정 된 쿼리는 다음과 같습니다.

SELECT Orders.OrderNumber, max(LineItems.Quantity), max(LineItems.Description)
FROM Orders
    INNER JOIN LineItems 
    ON Orders.OrderID = LineItems.OrderID
Group by Orders.OrderNumber




sql sql-server sql-server-2008 inner-join sql-delete