SQL检查表B或C中是否存在表A行

时间:2014-11-30 20:23:09

标签: sql oracle

以下表名只是一个例子......

想象一下,我有一个表USER,一个表SUB_USER_1和一个表SUB_USER_2。 表SUB_USER_1(2)有一个列ID和一列USER_ID,用于将它们连接到USERS表。

现在,如果我想知道用户是否为1或2类型,请检查表SUB_USER_1或SUB_USER_2中是否存在,最佳方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我会使用case中的select

来执行此操作
select (case when su1.id is not null and su2.id is not null then 'BOTH'
             when su1.id is not null then 'TYPE1'
             when su2.id is not null then 'TYPE2'
             else 'Neither'
        end)
from (select 999 as user_id from dual) u left join
     sub_user_1 su1
     on su1.id = u.user_id left join
     sub_user_2 su2
     on su2.id = u.user_id

这假设子类型表中没有重复的行。这可以使用聚合来处理。

答案 1 :(得分:1)

SELECT 'SUB_USER_1' whichTable FROM SUB_USER_1 WHERE user_id = 999
UNION ALL
SELECT 'SUB_USER_2' FROM SUB_USER_2 WHERE user_id = 999;

会告诉您,哪个表格包含用户999的数据。

如果您想使用用户数据并且Sub_User表具有兼容列,您可以

SELECT AllSub.*, U.*
FROM
  (SELECT user_id, column1 alias1, column2 alias2, ... FROM Sub_User1
  UNION ALL
  SELECT user_id, column3, column4, ... FROM Sub_User1) AllSub
JOIN User U
  ON AllSub.user_id = U.id;

如果需要,可以缩小到子选择或外部的特定user_id。