2016-12-06 76 views
-1

可以說我有3個表,a,b和c。 A涉及與c有關的b。我需要從c中提取與所有記錄相關的所有記錄。子查詢拉特定記錄

如果表中的具有2個記錄和c具有3個記錄和以下爲真:

  • C1涉及a1和a2
  • C2涉及A1
  • C3涉及a1和a2

該查詢將返回c1和c3。

我只是因爲某種原因無法理解它。

SELECT c.value 
FROM c 
INNER JOIN b 
    ON c.b_id = b.b_id 
INNER JOIN a 
    ON b.a_id = a.a_id 
WHERE c.value IN (???) 
+0

歡迎來到SO。請以表格格式顯示[mcve]樣本表格數據和預期輸出。這樣你會得到更好的結果。 – OldProgrammer

+0

我很樂意舉一個更好的例子,但是再次遇到麻煩,我無法解決問題。我將來會做得更好。謝謝你的建議。 – ToastGhost

+0

B如何與A和C相關?爲我們提供樣本數據和預期結果。 – Fritz

回答

0

您的問題和示例代碼有不同的關係方向,這是令人困惑的。通過計數的接受您的代碼作爲正確的關係,方向指示器,並修改它會給你一個可能的,但不是非常優雅的解決方案:

SELECT value FROM (
    SELECT c.value, COUNT(DISTINCT a.a_id) a_qty FROM c 
    INNER JOIN b ON c.b_id = b.b_id 
    INNER JOIN a ON b.a_id = a.a_id 
    GROUP BY c.value 
) WHERE a_qty = (SELECT COUNT(*) FROM a) 
0

我的經驗是,Oracle的優化將使得這種做好特別是如果匹配列索引:

SELECT * 
    FROM c 
WHERE EXISTS 
      (SELECT NULL 
       FROM a 
        INNER JOIN b 
         ON (a.abmatch = b.abmatch) 
         AND b.cbmatch = c.cbmatch);