SQL Server 2008INNER JOIN
에서 를 사용하여 삭제하고 싶습니다 .
하지만이 오류가 발생합니다.
메시지 156, 수준 15, 상태 1, 줄 15
키워드 'INNER'근처의 구문이 잘못되었습니다.
내 코드 :
DELETE FROM WorkRecord2
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'
SQL Server 2008INNER JOIN
에서 를 사용하여 삭제하고 싶습니다 .
하지만이 오류가 발생합니다.
메시지 156, 수준 15, 상태 1, 줄 15
키워드 'INNER'근처의 구문이 잘못되었습니다.
내 코드 :
DELETE FROM WorkRecord2
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE 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
와 그 사이에 테이블 이름을 추가하십시오 FROM
. 또한 제거ORDER BY
레코드를 삭제하는 동안 주문할 항목이 없으므로 절을 .
따라서 최종 쿼리는 다음과 같아야합니다.
DELETE WorkRecord2
FROM WorkRecord2
INNER JOIN Employee
ON EmployeeRun=EmployeeNo
WHERE Company = '1'
AND Date = '2013-05-06';
DELETE Employee
하면 테이블 대신 직원 테이블에서 삭제됩니다 WorkRecord2
.
가능하면 도움이 될 것입니다.
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'
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
A를 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
이 쿼리를 사용해보십시오 :
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 WorkRecord2
FROM WorkRecord2
INNER JOIN Employee
ON EmployeeRun=EmployeeNo
WHERE Company = '1'
AND Date = '2013-05-06';
여기 내 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)
Company
및에 대한 표를 지정하지 않았습니다Date
이를 수정하려고 할 수 있습니다.
다음을 사용하는 표준 SQL MERGE
:
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
는 조인과 함께 사용하는 방법을 보여줍니다.