문제
나는 기본 테이블 1과 2가 있습니다. TBL1과 TBL2라고 부릅니다.
tbl1
---------
1 - apple |
2 - orange |
3 - banana |
4 - pineapple
tbl2
---------
1 - table |
2 - chair |
3 - sofa |
그런 다음 위의 두 테이블에 연결하는 외부 키가있는 TBL3이 있습니다.
표 3 양식에는 두 개의 선택된 필드가 있습니다. 하나는 TBL1을 쿼리하고 다른 하나는 TBL2를 쿼리하는 것입니다. 여태까지는 그런대로 잘됐다. TBL3에서 TBL1 및 TBL2의 항목을 결합합니다.
그런 다음 다음과 같은 상황이 있습니다. 사용자가 TBL3을 충족 할 때 사용자가 TBL1에서 항목을 선택한 후 SELECT2 (TBL2의 데이터에 해당)를 다시로드하기를 원합니다. 무엇 때문에?
TBL3을 처음으로 충족 시켰다고 말합시다. 사용자는 TBL1에서 "Apple"과 TBL2에서 "Sofa"를 선택했다고 가정 해 봅시다. 사용자가 "Apple"을 선택했을 때, 두 번째 드롭 다운 목록은 옵션으로 3 개의 항목을 모두 다시로드했습니다.
이제 사용자가 TBL3 양식을 이행하는 경우, 사용자가 "Apple"을 다시 선택하면 이제 2 개의 옵션 만 있습니다. 사과와 소파는 전에 선택되었습니다. 이제 옵션은 "테이블"과 "의자"입니다. 그가 "Apple"과 "Table"을 선택하면 첫 번째 항목 "Apple"의 나머지 옵션은 "의자"가됩니다. 등등...
TBL2에서 요소를 가져 오는이 쿼리를 실행하는 SQL을 생각할 수 없습니다. 나는 tbl1에서 선택한 요소를 사용해야하고 어떻게 든 마하에 해당하지 않는 나머지 항목을 잡아야합니다. 이 SQL 쿼리가 가능합니까? 나는 그렇게 믿지만 탈출구를 생각할 수는 없습니다.
해결책
표 3은 열이 있다고 생각합니다.
사용자, TBL1-ID, TBL2-ID
사용자 X의 경우 표 3에없는 TBL1로 만든 SELECON을 기반으로 TBL2의 값을 원한다고 생각합니다.
SELECT ID, Value
FROM tbl2
WHERE tbl2.ID NOT IN (
SELECT Tbl2-ID
FROM Table3
WHERE (User = <this user>) AND (Tbl1-ID = <selected tbl1 ID>)
)
다른 팁
링크가 사용자 기준으로있는 경우 :
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id
링크 인 경우 ~이다 사용자 기준에 따라 다음과 같습니다.
SQL Server :
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = @userId
신탁:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = :userId