我正在使用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。
我觉得我目前的做法非常低效。有一个更好的方法吗?
答案 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