문제

와우,이 주제에 대한 간단한 설명을 찾기가 어렵습니다. 간단한 다수의 관계.

3 개의 테이블, Tablea, TableB 및 Junction Tablea_B.

키 및 모든 것과 관계를 설정하는 방법을 알고 있지만 삽입, 업데이트 및 삭제를 수행 할 시간이 조금 혼란스러워집니다 ....

기본적으로 내가 찾고있는 것은 다음을 보여주는 예입니다.

  1. TableB의 ID를 기준으로 Tablea에서 모든 레코드를 얻는 방법

  2. Tablea의 ID를 기준으로 모든 레코드를 얻는 방법

3 Tablea 또는 TableB에 삽입 한 다음 Junction 테이블에 적절한 삽입을하여 연결하는 방법 ..

나는 특정 프로젝트에 대한 해결책을 찾고 있지 않고 적용 할 수있는 몇 가지 일반적인 예만을 찾고 있습니다. 어쩌면 당신은 주변에있는 것이 있습니까?

도움이 되었습니까?

해결책

내가 가장 먼저 할 일은 orm과 같은 것을 사용하는 것이 좋습니다. linq-to-sql 또는 nhibernate 이를 통해 데이터 모델의 객체 표현을 제공하여 다수의 CRUD 작업과 같은 복잡한 것들을 처리하는 것이 훨씬 간단합니다.

ORM이 공구 세트의 일부가 아니라면 여기에 이것이 SOL에서 어떻게 보이는지가 있습니다.

Users       UserAddresses     Addresses
=======     =============     =========
Id          Id                Id
FirstName   UserId            City
LastName    AddressId         State
                              Zip

우리의 테이블은 다음과 같이 연결됩니다.

   Users.Id -> UserAddresses.UserId
   Addresses.Id -> UserAddresses.AddressId
  • 주소를 기준으로 사용자의 모든 레코드
SELECT        Users.*
FROM            Addresses INNER JOIN
                         UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN
                         Users ON UserAddresses.UserId = Users.Id
WHERE        (Addresses.Id = @AddressId)
  • user.id를 기반으로 주소의 모든 레코드
SELECT        Addresses.*
FROM            Addresses INNER JOIN
                         UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN
                         Users ON UserAddresses.UserId = Users.Id
WHERE        (Users.Id = @UserId)

다른 팁

SELECT *
FROM a
WHERE id IN (SELECT aid FROM ab WHERE bid = 1234)

또는

SELECT a.*
FROM a
JOIN ab ON a.id = ab.aid
WHERE ab.aid = 12345

삽입하려면 데이터베이스에 따라 다릅니다 (예 : 기본 키가 시퀀스, 다른 방식으로 자동 생성 또는 단순히 복합 키로 생성되는지 여부). 그러나 당신은 단지 필요합니다 :

그 데이터를 위해 :

INSERT INTO a VALUES (...)

관계를 위해 :

INSERT INTO ab VALUES (...)

영어로 B의 키를 기준으로 모든 레코드를 표에 얻으려면 TableB 키와 함께 레코드가있는 표 A의 레코드를 원합니다 (Tabea_B는 두 개의 외국 키 col (tabafk 및 tabbfk)을 가지고 있습니다.

  Select * from TableA A
  Where pK In (Select Distinct TabAFK From tableA_B
                Where TabBFK = @TableBKeyValue)

다른 방향에 대해서도 마찬가지입니다

  Select * from TableB B
  Where pK In (Select Distinct TabBFK From tableA_B
                Where TabAFK = @TableAKeyValue)

새 레코드를 삽입하려면 필요에 따라 정상적인 삽입 및 tableb에 삽입하는 것 ... 조인 테이블 (tablea_b)에 삽입 된 두 메인 테이블의 두 PK입니다.

   Insert TableA (pk, [other columns]) Values(@pkValue,  [other data)
   Insert TableB (pk, [other columns]) Values(@pkValue,  [other data)

- 그런 다음 존재하는 각 협회에 대한 조인 테이블에 삽입하십시오 ...

  Insert tableA_B (TabAFK, TabBFK)  Values(@PkFromA,  @PkFromB)  

1) tablea를 선택하십시오.* Tablea에서 tablea_B를 결합하여 tablea.id = tablea_b.ida where tablea_b.idb = somevalue

2) tableb에서 선택하십시오.* tableb에서 왼쪽 왼쪽으로 tablea_b join tablea_b on tableb.id = teblea_b.idb 여기서 tablea_b.ida = somevalue

3) 삽입은 데이터베이스에 의존하지만 A에 삽입하고 B에 삽입 한 다음 A_B에 삽입하십시오. 테이블에 제약 조건이 있어도 그렇게 작동해야합니다.

힌트 : 1/2의 운영자에서 사용하지 마십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top