我需要帮助加入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语句中的表。'
答案 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中的条件匹配。