2011-10-26 56 views

回答

-1

這應該爲你工作:

SELECT * FROM Table1 t1 
LEFT JOIN 
    (SELECT userID FROM Table2) 
    AS t2 ON t1.userID=t2.userID 
+0

如何從table2檢索授權2? – eaolson

+0

當你使用SELECT *和JOIN時,結果包含ON子句中引用的所有表中的所有列 – Rucia

+0

哦,geez,我完全沒有注意到* – eaolson

3

這不只是一個簡單的外部連接,如果你正在尋找只爲那些存在於一張桌子上而不是另一張桌子上的權利。

SELECT t1.userid, t1.entitlement_1, NULL AS entitlement_2 
    FROM table1 t1 
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 
        WHERE t2.userid = t1.userid 
         AND t2.entitlement_2 = t1.entitlement_1) 
UNION ALL 
SELECT t2.userid, NULL AS entitlement_1, entitlement_2 
    FROM table2 t2 
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 
        WHERE t1.userid = t2.userid 
         AND t1.entitlement_1 = t1.entitlement_2) 

第一個select會查找table2中不存在的userid和entitlement_1對,第二個select會做相反的操作。你沒有提供關於所涉及的表的很多信息,例如,如果userid或(userid,entitlement)是主鍵或任何東西,所以這可能能夠被優化。

+0

no,兩個表都沒有主鍵;事實上,這是我正在做的一個更大的查詢的一部分。 但還有一個問題;在table1中的權利的形式是「*/*/fis/<權利id>」你知道我將如何過濾,所以我只是得到權利ID比較table2權利ID – user652778

+0

你將不得不提取id,可能使用'SUBSTR'或'REGEXP_SUBSTR',如'SUBSTR(t1.entitlement_1,9)= t2.entitlement_2'(或其他)。請注意,如果您在t1.entitlement列上有任何此類功能,那麼使用這樣的功能將會繞過索引,並且會降低查詢速度。 – eaolson

相關問題