2016-12-06 48 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);