it-swarm-ko.com

SQL Server에서 INNER JOIN을 사용하여 삭제하는 방법?

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'
1063
nettoon493

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

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

삭제할 테이블을 지정해야하기 때문에 레코드 삭제 위치에서 DELETEFROM 사이에 테이블 이름을 추가하기 만하면됩니다. 또한 레코드를 삭제하는 동안 주문할 것이 없기 때문에 ORDER BY 절을 제거하십시오.

따라서 최종 쿼리는 다음과 같아야합니다.

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

이 시도:

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

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

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 ....
)
23
Devart

그것은해야한다:

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

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

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

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

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';
7
Ali

SQL Server Management Studio에서는 SELECT 쿼리를 쉽게 만들 수 있습니다.

SELECT Contact.Naam_Contactpersoon, Bedrijf.BedrijfsNaam, Bedrijf.Adres, Bedrijf.Postcode
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

실행할 수 있고 모든 연락처가 표시됩니다.

이제 SELECT를 DELETE로 변경하십시오.

DELETE Contact
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

SELECT 문에서 본 모든 레코드가 제거됩니다.

동일한 절차로 더 어려운 내부 조인을 만들 수도 있습니다. 예를 들면 다음과 같습니다.

DELETE FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf
INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijf
6
frans eilering
 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'
5
Dhanraj Mittal

시도해보십시오. 도움이 될 수 있습니다.

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

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 

참고 : JOIN을 사용하려면 CTE 내부에서 delete을 사용할 수 없습니다.

3
Pரதீப்

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

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

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, 즉 코드를 작성하는 사람이 반드시 코드를 읽고 유지할 사람을 염려하지 않는다는 답에 가장 잘 설명되어 있다고 생각합니다.

2
onedaywhen

다음은 내 SQL Server 버전입니다.

DECLARE @ProfileId table(Id bigint)

DELETE FROM AspNetUsers
OUTPUT deleted.ProfileId INTO @ProfileId
WHERE Email = @email

DELETE FROM UserProfiles    
WHERE Id = (Select Id FROM @ProfileId)
1
ozzy432836

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

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