我需要帮助连接 3 个未全部互连的表
假设我有表 A、B、C
这是关系
A.类型=B.类型
A.模型=C.模型
我需要做的是内连接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 语句中的表。”
最佳答案
我知道这是一个风格问题,但在我看来,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)
关于sql - ORACLE/SQL - 连接3个并非全部互连的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760020/