比较两个不同表的公共列中的值并显示差异

时间:2013-01-28 11:32:54

标签: sql oracle plsql

我有两张表USERUSER_BALUSER _IDUSER表的主键和USER_BAL表的外键。我需要比较两个表的USER_ID列,以确保USER_BAL.USER_ID中的任何值在USER.USER_ID中都具有匹配值。我还需要输出左边的那些。

2 个答案:

答案 0 :(得分:1)

以下内容将为所有用户提供User_Bal但不包含在User:

中的条目
SELECT DISTINCT User_Bal.UserID
From User_Bal
Where User_Bal.UserID NOT IN
(
   SELECT User.UserID
   FROM USER
)

如果您需要在User中获取UserID,而不是在User_Bal中的User_Bal和UserID中,而不是在User中,则Ivan的答案是一个很好的起点。

但是,结果将取决于您的数据库架构。用户与User_Bal是一对一还是一对多的关系?

如果一对一,那么您应该更改架构,使UserID既是User_Bal表的FK又是PK。如果一对多,那么Ivan的答案将为同一个UserID返回多行。

答案 1 :(得分:0)

试试这个:

此查询提供存在于用户表中的用户标识。

SELECT USER_BAL.USER_ID 
FROM USER_BAL 
WHERE EXISTS (
                SELECT USER.USER_ID 
                FROM USER 
                WHERE USER.USER_ID = USER_BAL.USER_ID
             )

此查询将不存在的用户标识提供给用户表

SELECT USER_BAL.USER_ID 
FROM USER_BAL 
WHERE NOT EXISTS (
                    SELECT USER.USER_ID 
                    FROM USER 
                    WHERE USER.USER_ID = USER_BAL.USER_ID
                 )