ORACLE / SQL - 连接3个并非全部互连的表

时间:2011-04-22 21:03:21

标签: sql oracle join

我需要帮助加入3个表,它们并非全部互连

所以我想说我有表A,B,C

这是关系

A.type = B.type

A.model = C.model

我需要做的是内连接A和B并返回所有匹配的A记录。接下来,我需要从先前连接中匹配的C中提取记录。

或者换句话说,C中的所有记录都在A中,其中A在B

希望这是有道理的。很抱歉没有数据示例。

我试过这个

select
    c.*
from
    c, a, b
where
    c.model_ = a.model_
    and a.type_ = b.type_

但收到此消息'错误:查询有MERGE JOIN CARTESIAN。您必须更正where子句以正确连接select语句中的表。'

3 个答案:

答案 0 :(得分:3)

我知道这是一个风格问题,但在我看来,ansi风格的加入使这一点更加清晰:

SELECT c.*
FROM c
JOIN a ON a.model = c.model
JOIN b on b.type = a.type

如果a或b中有多个匹配元素,则此查询将返回重复项。您可以添加DISTINCT或将其重写为EXISTS查询:

SELECT *
FROM c
WHERE EXISTS (SELECT 1
              FROM a
              JOIN b ON b.type = a.type
              WHERE a.model = c.model)

我认为这也应该给出相同的结果,只要模型中没有NULL值:

SELECT *
FROM c
WHERE c.model IN (SELECT a.model
                  FROM a
                  JOIN b ON b.type = a.type)

答案 1 :(得分:0)

只需使用AND条件

加入C.

答案 2 :(得分:0)

如果没有数据样本,很难理解实际问题并验证查询。

你试过试试..

Select c.*
   from a,b,c
    where a.type = b.type
      and a.model = c.model;

您是否丢失了一些记录或看到了您不希望看到的额外记录?

上述查询只会为您提供c中的记录,其中记录与b中的条件匹配。