2009-08-02 87 views
0

我有一個和兩個基本表。讓我們稱它們爲tbl1和tbl2。高級SQL SELECT

tbl1 
--------- 
1 - apple | 
2 - orange | 
3 - banana | 
4 - pineapple 

tbl2 
--------- 
1 - table | 
2 - chair | 
3 - sofa | 

然後有tbl3有外鍵鏈接到上面的兩個表。

表3窗體有兩個選擇字段:一個查詢tbl1,另一個查詢tbl2。到現在爲止還挺好。我將tbl1和tbl2中的項目組合在tbl3中。

然後我有以下情況:當用戶滿足tbl3時,我希望select2(對應於來自tbl2的數據)在用戶從tbl1中選擇一個項目後重新加載。做什麼的?

讓我們說第一次滿足tbl3用戶從tbl1挑選「apple」,從tbl2挑選「沙發」。當用戶選擇「apple」時,第二個下拉列表將重新加載所有3個項目作爲選項。

現在,用戶第二次完成tbl3表單,如果用戶再次選擇「apple」,他現在只有2個選項。蘋果和沙發之前已被選中。選項現在只有「桌子」和「椅子」。如果他現在選擇「蘋果」和「桌子」,則第一項「蘋果」的剩餘選項將是「椅子」。等等...

我想不出一個SQL來運行這個查詢從tbl2抓取元素。我必須使用tbl1中的選定元素,並以某種方式抓取剩餘項目,這些項目與mach沒有對應。這個SQL查詢是否存在?我相信如此,但無法想出辦法。

+0

,目前還不清楚的。我建議你發佈TSQL嘗試... – 2009-08-02 06:17:18

回答

0

我猜測,表3中的列:

用戶,TBL 1-ID,TBL2-ID

我猜測你想要的,用戶X,爲tbl2的價值觀基礎上製成的選擇中TBL1未在表3

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>) 
    ) 
+0

嗯,很好,我認爲這正是我需要的。仍然沒有測試,但我相信它會完美運作。謝謝。 – 2009-08-02 06:57:29

1

如果鏈接是在每個用戶的基礎上:

SELECT t.id, 
     t.value 
    FROM TABLE2 t 
    JOIN TABLE3 t3 ON t3.id != t.id 

如果的聯繫是每用戶基礎:

SQL服務器:

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 
+0

謝謝你的解決方案。我採用了先前用戶的另一個,因爲它首先到達。它工作正常。我沒有測試過你的,但我相信它也能起作用。我不知道你的數據庫處理是否會消耗更少(因爲他在SELECT中有一個SELECT,或者它是相同的。謝謝。 – 2009-08-03 18:58:03