在视图中使用UNION选择

时间:2012-05-17 10:56:01

标签: sql-server union distinct sql-view

我需要检查特定用户是否已经引用了我们的一个事务表(我们有大约10个事务表)。我建议使用包含已经引用的所有用户的VIEW,然后DEV团队可以通过该表进行SELECT,以查明他们正在寻找的数据是否存在,

所以这是我对视图的查询:

SELECT DISTINCT user_ID
FROM transaction_table_1

UNION

SELECT DISTINCT user_ID
FROM transaction_table_2

UNION

SELECT DISTINCT user_ID
FROM transaction_table_3

UNION

SELECT DISTINCT user_ID
FROM transaction_table_4

[...]

现在它有效,但我的问题是,这是一个好主意吗?该要求要求我只提供一个脚本(或一个视图),而不是一个存储过程,我认为这对于SP会更好,因为我可以为每个表做一个快速IF EXIST()语句,然后检查是否参数user存在于任何表中,但他们真的希望它只是一个他们可以检查的脚本(并且不使用变量)。

你们能否就更好的方式提出建议,这对性能影响较小,因为这可能不是满足这一要求的优化解决方案。

TIA, 隆美尔

2 个答案:

答案 0 :(得分:2)

好吧,您可以移除DISTINCT,因为UNION已经成功了:)

SELECT user_ID
FROM transaction_table_1

UNION

SELECT user_ID
FROM transaction_table_2

UNION

SELECT user_ID
FROM transaction_table_3

UNION

SELECT user_ID
FROM transaction_table_4

但是由于你必须使用一个视图,我不知道如何以不同的方式使用它。

答案 1 :(得分:1)

从性能的角度来看,我会以稍微不同的方式构建查询:

SELECT DISTINCT user_ID
FROM (

    SELECT user_ID
    FROM transaction_table_1

    UNION ALL

    SELECT user_ID
    FROM transaction_table_2

    UNION ALL

    SELECT user_ID
    FROM transaction_table_3

    ...
) x

这将减少需要执行1的唯一索引扫描的数量 - 而不是每次执行UNION时都有一个