2014-11-28 3 views
0

내 친구가이 질문을하고 나에게 답을 모르겠습니다.두 개의 조인 된 테이블에서 개별 테이블 업데이트 (SQL)

JOIN을 사용하여 다른 테이블에 추가 된 개별 테이블을 업데이트 할 수 있습니까?

예를 들어 P.table_aP.table_b입니다. table_atable_b이 "결합"되었습니다. 반환 된 (결합 된) 결과에서 table_a을 업데이트하고 원래 table_a에이 변경 사항을 반영시킬 수 있습니까? 또는 조인은 테이블의 복사본을 만들므로 모든 편집 내용이 JOIN의 결과에만 영향을 줍니까? 나는 첫 번째 옵션으로 기대고 있지만 100 % 확실하지는 않습니다.

+1

이것은 매우 DBMS에 따라 다릅니다. 어느 쪽을 사용하고 있습니까? 포스트그레스? 신탁? –

+0

나는 그들이 MySQL을 사용한다고 생각한다. (나는 DBMS라고 생각한다.) – DerStrom8

답변

2

귀하의 질문에 약간의 불확실성이 있습니다. 그러나 일반적인 대답은 "예"입니다. 여기에 몇 가지 메커니즘은 다음과 같습니다

  • 많은 데이터베이스는 update 구문에 직접 join을 지원합니다. 이 경우 과 join을 명시 적으로 쓸 수 있습니다.

  • 많은 데이터베이스가 merge 문을 지원합니다. 이 경우 mergeupdate과 많이 유사하며 join을 허용합니다.

  • 많은 데이터베이스가 뷰에서 트리거를 지원합니다. 이 경우 뷰에 업데이트 트리거를 쓸 수 있습니다. 실행되면 트리거가 뷰를 업데이트 할 수 있습니다.

  • 일부 데이터베이스는 구체화 된보기를 지원합니다. 뷰 (조인 된 테이블을 가질 수 있음)입니다. 기본 데이터가 변경되면 구체화 된보기가 변경됩니다.

내가 추가하지 않은 다른 방법이있을 수 있습니다. 의심의 여지가, 당신이 사용하는 데이터베이스 중 하나 이상을 지원합니다.

편집 :

다시 한번, 나는 당신이 무슨 뜻인지 모르겠어요. "가상 테이블"에 대해 생각할 수있는 유일한 공식적인 사용은 외부 데이터 소스를 참조하는 SQLite의 특정 메커니즘입니다.

아마도 여러분이 정말로 원하는 것은 모두보기입니다. 이것은 표준이며 기본적으로 모든 데이터베이스에서 사용 가능합니다. 뷰 정의에 조인이있을 수 있습니다. 뷰가 실행될 때 결과는 원본으로 사용하는 테이블의 최신 버전에서 가져옵니다. 관련된 "업데이트"가 없습니다. 뷰를 정의하는 쿼리는이를 참조하는 쿼리가 실행될 때 (어떤 방식으로) 실행됩니다.

+0

이것은 나의 질문이 얼마나 모호한지를 고려해 볼 때 대단한 답이다. 나는 그것이 매우 불분명하다는 것을 깨닫고 그것을 더 명확하게 만드는 방법을 찾으려고 노력하고있다. 가상 table_c가 table_a와 table_b를 결합했다고 가정합니다. table_c를 편집하면 변경 사항이 table_a 및/또는 table_b에 반영됩니까? 난 당신의 대답을 읽고 있어요 그리고 난 여전히 약간의 용어 (SQL은 여전히 ​​내게 아주 새로운)에 조금 iffy 해요. 그것은 내가 잘못된 용어를 사용하고있을 수도 있습니다. 나는 실제로 생각하고있는 질문에 당신이 대답했는지 여부를 말할 수 없습니다. 내가 정확하게 표현했는지 모르겠다. 이게 말이 돼? – DerStrom8

+0

방금 ​​결과 테이블을 의미하는 "가상 테이블"을 의미했습니다. 거짓 용어를 당신에게 던지려하지 않았습니다. 그가 실제로 알지 못했던 Java로 이러한 쿼리를 실제로 만들고 있다고 밝혀졌습니다.나는 그것이 명확성의 부족을 설명한다고 생각한다 - 나는 그가 초기 질문에서 그것을 버렸기 때문에 그가 무엇을 묻고 있는지 이해하지 못했다. 혼란에 사과드립니다. 매우 유익한 답변이므로 계속 +1하겠습니다. – DerStrom8

관련 문제