2009-04-11 7 views
1

두 테이블이 있습니다. 코스와 faculty_courses - 각각 기본 키 course_ID가 varchar (50)이 아닌 null입니다.SQl 둘 이상의 테이블에서 삭제

코스 테이블에서 행을 삭제하려고합니다. 관계로 연결되어 있으므로 두 테이블에서 해당 행을 삭제해야한다고 가정합니다. 작동하지 않습니다 - -

내가 쓴 코스가 faculty_courses 가입 FROM 삭제 키워드 근처의 구문이 잘못이

을 '가입하기'라고 Courses.course_ID = faculty_courses.course_ID WHERE faculty_courses.course_ID = 'ITM731'

아이디어가 있으십니까?

답변

6

두 문장을 사용해야합니다.

DELETE Courses where course_ID = 'ITM731' 
DELETE faculty_courses WHERE course_ID = 'ITM731' 

또는 여기에 언급 된 것처럼 삭제 캐스케이드를 사용하십시오.

+1

일반적으로 계단식 삭제 대신 권장합니다. 이는 의도가 무엇인지 알기 쉽습니다. – JoshBerke

+0

+1 주석에 Josh :) –

2

테이블 사이에 ON DELETE CASCADE 개의 링크가 있으면 원하는 것을 처리 할 수 ​​있습니다. RDBMS에서 허용하는 경우.

2

당신은 FK reference with CASCADE Delete

편집

난 당신이 명시 적으로 계단식 반대로 두 테이블에서 삭제하는 Ocedecio에서 접근 방법을 사용하는 것이 좋습니다를 만들 수 있습니다. 그것은 당신의 의도를 훨씬 더 분명하게 만듭니다.

0

DELETE 한 테이블에서 레코드 만 삭제 - JOIN 구문은 해당 테이블에서 올바른 행을 선택하는 데 유용합니다 (예 : 1 : n 관계가있는 테이블 (사용자가 여기있는 항목이 아님)에서 삭제하려는 경우). "1"테이블의 선택 가능한 레코드와 관련된 "n"테이블의 모든 레코드는 DELETE FROM ntable INNER JOIN reftable ON ntable.ref = reftable.ref WHERE reftable.column = 'whatyouneedtolookup'입니다.

이제 내가 말했듯이 이것은 두 개의 DELETE 문 (각 테이블마다 하나씩)을 동일한 키에 발급하기 만하면되는 현재 상황과 관련이 없습니다.

그 말은 귀찮다는 생각이 드는 테이블 사이에 1 : 1 참조가있는 것처럼 들리지만 일반적으로 그런 종류의 참조에서는 사소한 정규화가 테이블을 열이있는 단일 테이블로 병합하는 것입니다 두 테이블에서.

+0

엔터티를 하위 유형으로 지정할 경우 1 : 1 관계가 유효 할 수 있습니다. 이 경우에는 그가 두 테이블 모두에서 하나의 컬럼 인 PK에 대해 잘못 생각한 것 같지만. 아마도 faculty_courses는 course_id를 포함한 복합 키입니까? –

-2
alter table tablename drop column columnname 
+0

OP가 행을 삭제하려고합니다. 기둥이 아님 –

관련 문제