Sql Oracle不存在内部不存在
伙计们,当我运行此查询时:Sql Oracle不存在内部不存在,sql,oracle,not-exists,Sql,Oracle,Not Exists,伙计们,当我运行此查询时: SELECT * FROM big_table big WHERE sum_number = 1 AND NOT EXISTS ( SELECT 1 FROM smal_table smal WHERE other_number = big.other_number ) 我得到4个结果,但当我运行这一个 SELECT * FROM big_table big W
SELECT * FROM big_table big
WHERE sum_number = 1
AND NOT EXISTS ( SELECT 1
FROM smal_table smal
WHERE other_number = big.other_number
)
我得到4个结果,但当我运行这一个
SELECT * FROM big_table big
WHERE sum_number = 1
AND NOT EXISTS ( SELECT 1
FROM smal_table smal
WHERE other_number = big.other_number
AND NOT EXISTS ( SELECT 1
FROM and_another_table another
WHERE and_another_number = big.and_another_number
)
)
我收到了大桌子上的所有台词。
有人知道为什么会这样吗?
我想做一个查询,显示大_表中不存在于smal_表中的所有行,但如果它存在于小表中,我只需要不在and_另一个_表中的行
有人能帮我吗
编辑:我想要大表中不在小表中的行,加上大表中不在小表中但不在另一个表中的行,我认为逻辑是你想要大表中不在小表或另一个表中的行。如果是这样,这应该满足您的要求:
SELECT *
FROM big_table big
WHERE sum_number = 1 AND
(NOT EXISTS (SELECT 1
FROM small_table smal
WHERE other_number = big.other_number
) OR
NOT EXISTS (SELECT 1
FROM and_another_table another
WHERE and_another_number = big.and_another_number
)
);
编辑:
根据以下评论,where条款应为:
WHERE sum_number = 1 AND
(NOT EXISTS (SELECT 1
FROM small_table smal
WHERE other_number = big.other_number
) OR
EXISTS (SELECT 1
FROM and_another_table another
WHERE and_another_number = big.and_another_number
)
);
第一个内部选择得到许多匹配项,因此您只得到该集中没有匹配项的4条记录。第二个内部select还有一个条件需要满足,因此它会找到更少的记录,因此当然,大表中有更多的记录这次没有匹配项。请再次解释您到底想要选择什么。我不明白你的解释。不,我想要大桌子上不在小桌子上的线条加上大桌子上不在小桌子上的线条,然后再加上另一个_table@user3360301 . . . 问题是如果它存在于小表中,我只想要不在and_另一个_表中的行。至少我对正确的逻辑感到困惑。但是,根据您的评论,您可以将最后一个不存在更改为存在。