Sql 使用联接查询从第二个表检索缺少的数据 让我们考虑这两个表: TABLE(T_USER) user_id TABLE(T_MESSAGE) msg_type (values = 0, 1, 2, 3) answered (values = 0, 1) user_id

Sql 使用联接查询从第二个表检索缺少的数据 让我们考虑这两个表: TABLE(T_USER) user_id TABLE(T_MESSAGE) msg_type (values = 0, 1, 2, 3) answered (values = 0, 1) user_id,sql,oracle,Sql,Oracle,如您所见,任何用户都可以看到0-n消息 我正在尝试使用SQL查询(在Oracle 10g上)检索存在某种类型的否消息且未应答的所有用户的列表(例如,其中msgType=1,应答=0)。这个用户可能有其他消息,如果没有一条符合这些条件,那么我的请求应该 这个查询应该是什么样子的?怎么样 SELECT * FROM T_USER WHERE user_id NOT IN (SELECT user_id FROM T_MESSAGE WHERE msgType = 1 AND answ

如您所见,任何用户都可以看到
0-n
消息

我正在尝试使用SQL查询(在Oracle 10g上)检索存在某种类型的消息且未应答的所有用户的列表(例如
,其中msgType=1,应答=0
)。这个用户可能有其他消息,如果没有一条符合这些条件,那么我的请求应该

这个查询应该是什么样子的?

怎么样

SELECT * FROM T_USER WHERE user_id NOT IN 
       (SELECT user_id FROM T_MESSAGE WHERE msgType = 1 AND answered = 0)
怎么样

SELECT * FROM T_USER WHERE user_id NOT IN 
       (SELECT user_id FROM T_MESSAGE WHERE msgType = 1 AND answered = 0)
还需要注意的是,
不存在的解决方案
在oracle中的性能要比
不存在的
左连接的
更高

select u.user_id
    from T_USER u
        left join T_MESSAGE m
            on u.user_id = m.user_id
                and m.msgType = 1
                and m.answered = 0
    where m.user_id is null

还要注意的是,
不存在
的解决方案在oracle中的性能要比
不存在
左连接
更高。谢谢,我们的想法是将标准放在
左连接
上,而不是像我尝试的那样放在
块的某个地方。谢谢,我们的想法是将标准放在
左连接
,而不是像我尝试的那样放在
where
块的某个地方。感谢您的通知,即使在我的情况下性能不是问题(使用
左连接的解决方案足够快)@romaintaz:尽管-在我的日常生活中,我宁愿不存在,因为它对我来说更容易阅读;-)在我的系统中,它们都会产生完全相同的执行计划,并在1893年得到一致的结果。几乎完全相同的执行计划;-)感谢您的通知,即使在我的情况下,性能不是一个问题(使用
左连接的解决方案足够快)。@romaintaz:即使-在我的日常生活中,我宁愿不存在,因为它对我来说更具可读性;-)在我的系统中,它们都会产生完全相同的执行计划,并在1893年得到一致的结果。几乎完全相同的执行计划;-)
select u.user_id
    from T_USER u
        left join T_MESSAGE m
            on u.user_id = m.user_id
                and m.msgType = 1
                and m.answered = 0
    where m.user_id is null