检查多个表中是否存在id

时间:2015-06-18 14:55:58

标签: sql-server sql-server-2012

我正在使用SQL Server 2012。

我有5张桌子(我们称之为A,B,C,D和E)。每个表都包含一个名为m_id的列,其中包含nvarchar(10)的id。

我目前在下面运行查询5次(更改表名)。查看表是否包含id。

select m_id from A where m_id = 'some_id'

基本上我想知道id是否是5个表中的任何一个,如果是,则返回1,否则如果5个表中的任何一个表中都不存在则返回0。

我觉得我目前的做法非常低效。有一个更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用UNION(预先删除重复项)或UNION ALL

SELECT CASE WHEN EXISTS 
  ( SELECT 1 FROM ( SELECT m_id FROM  A 
                    UNION 
                    SELECT m_id FROM  B 
                    UNION 
                    SELECT m_id FROM  C 
                    UNION 
                    SELECT m_id FROM  D 
                    UNION 
                    SELECT m_id FROM  E ) All 
    WHERE  All.m_id = 'some_id') 
THEN 1 ELSE 0 END AS ContainsID 

答案 1 :(得分:0)

您可以使用:

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END as returnCode
FROM (
    SELECT m_id, N'A' as tableName FROM A WHERE m_id = 'some_id'
    UNION ALL
    SELECT m_id, N'B' as tableName FROM B WHERE m_id = 'some_id'
    UNION ALL
    SELECT m_id, N'C' as tableName FROM C WHERE m_id = 'some_id'
    UNION ALL
    SELECT m_id, N'D' as tableName FROM D WHERE m_id = 'some_id'
    UNION ALL
    SELECT m_id, N'E' as tableName FROM E WHERE m_id = 'some_id'
) data