복붙노트

[SQL] 어떻게 INNER은 SQL Server에 가입하여 삭제하는 방법?

SQL

어떻게 INNER은 SQL Server에 가입하여 삭제하는 방법?

나는 INNER은 SQL Server 2008의 가입 사용하여 삭제합니다.

그러나 나는이 오류가 발생합니다 :

내 코드 :

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

해결법

  1. ==============================

    1.여기 별명을 가진 버전, 당신은에서 삭제하는 것을 테이블에 지정해야합니다 :

    여기 별명을 가진 버전, 당신은에서 삭제하는 것을 테이블에 지정해야합니다 :

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

    2.우리가 삭제할 수있는 테이블을 지정하기 때문에 그냥 당신이 기록을 삭제할 곳에서 DELETE 사이에서 테이블의 이름을 추가합니다. 순서에 아무것도 기록을 삭제하는 동안이 없기 때문에 또한 ORDER BY 절을 제거합니다.

    우리가 삭제할 수있는 테이블을 지정하기 때문에 그냥 당신이 기록을 삭제할 곳에서 DELETE 사이에서 테이블의 이름을 추가합니다. 순서에 아무것도 기록을 삭제하는 동안이 없기 때문에 또한 ORDER BY 절을 제거합니다.

    그래서 최종 쿼리는 다음과 같이해야합니다 :

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

    3.가능한이 당신을 위해 도움이 될 수 -

    가능한이 당신을 위해 도움이 될 수 -

    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 ....
    )
    
  4. ==============================

    4.이 시도:

    이 시도:

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

    5.그것은해야한다:

    그것은해야한다:

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

    6.이 버전해야는 작품

    이 버전해야는 작품

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

    7.SQL Server 관리 Studio에서 나는 쉽게 SELECT 쿼리를 생성 할 수 있습니다.

    SQL Server 관리 Studio에서 나는 쉽게 SELECT 쿼리를 생성 할 수 있습니다.

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

    나는 그것을 실행할 수 있습니다, 내 모든 연락처가 표시됩니다.

    이제 삭제하려면 SELECT 변경 :

    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
    
  8. ==============================

    8.

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

    9.이 쿼리 검색 :

    이 쿼리 검색 :

    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';
    
  10. ==============================

    10.CTE를 사용하는 또 다른 방법.

    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 
    

    참고 : 우리는 삭제할 때 CTE 내부에 가입 할 수 없습니다.

  11. ==============================

    11.이 시도, 그것은 도움이 될 수 있습니다

    이 시도, 그것은 도움이 될 수 있습니다

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

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

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

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

    13.여기 내 SQL Server 버전입니다

    여기 내 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)
    
  14. ==============================

    14.당신은 회사와 날짜 테이블을 지정하지 않으면, 당신은 그 문제를 해결 할 수 있습니다.

    당신은 회사와 날짜 테이블을 지정하지 않으면, 당신은 그 문제를 해결 할 수 있습니다.

    표준 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 즉 반드시 읽고 코드를 유지하는 사람에 대해 상관하지 않는 코드를 작성하는 사람.

  15. ==============================

    15.저는 여기에 현재 삭제하거나, 업데이트를 위해 무엇을 사용 :

    저는 여기에 현재 삭제하거나, 업데이트를 위해 무엇을 사용 :

    DELETE           w
    FROM             WorkRecord2   w,
                     Employee      e
    WHERE            w.EmployeeRun = e.EmployeeNo
                 AND w.Company = '1' 
                 AND w.Date = '2013-05-06'
    
  16. from https://stackoverflow.com/questions/16481379/how-to-delete-using-inner-join-with-sql-server by cc-by-sa and MIT license