【问题标题】:query multiple tables and combine results into one return table for stored procedure?查询多个表并将结果合并到一个存储过程的返回表中?
【发布时间】:2010-06-15 18:25:58
【问题描述】:

我有几个不同的表,但它们都有 2 个同名的列。我想编写一个存储过程,在所有表中搜索一列并返回结果。想法?在 SQL 方面,我相当笨拙。

【问题讨论】:

    标签: sql stored-procedures select


    【解决方案1】:

    您要查找的操作是UNIONUNION ALL

    SELECT * FROM (
     SELECT col1, col2 FROM table1
     UNION ALL
     SELECT col1, col2 FROM table2
     UNION ALL
     SELECT col1, col2 FROM table3
    ) all_tables
    WHERE all_tables.col1 = 'something'
    

    如果您使用UNION 而不是UNION ALL,数据库将消除可能在多个表中的重复行。如果您知道不会有任何重复,请使用UNION ALL,因为它通常更快。

    【讨论】:

      【解决方案2】:
      Select myColumn FROM Table1
      UNION Select myColumn FROM Table2
      UNION Select myColumn FROM Table3 
      

      ..等

      -- 注意所有列名必须相同,并且必须在每个表中才能正常工作

      【讨论】:

        【解决方案3】:

        您甚至不需要存储过程...只需使用联合查询。

        select field1, field2 from table1 where table1.field1=criteria
        union
        select field1, field2 from table2 where table2.field1=criteria
        union
        select field1, field2 from table3 where table3.field1=criteria
        etc...
        

        【讨论】:

        • 但是您的查询可以放在存储过程中。您不应该将查询与存储过程进行比较,查询进入存储过程内部,您可以在其中添加安全层。所以他/她可能想把它放到一个存储过程中。
        猜你喜欢
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多