【问题标题】:SQL Two Tables with One Unique columnSQL 有一个唯一列的两个表
【发布时间】:2023-03-19 05:40:01
【问题描述】:

我有两个表 tbl_backupchecks 和 tbl_backupchecks_sqlbak。

两个表都有两个列名,Company 和 ServerName。

我想返回一个包含公司和服务器名称但在合并列表中的结果集。本质上,如果 tbl_backupchecks_SQLBak 中有一个 servername 和 companyname 不在 tbl_backupchecks 中,我也想报告它。

在基本术语中,我想要一个两列的行结果集;公司和服务器名称。我尝试编写左连接,但它买回了两个名为 ServerName 的列。这个可以吗?

【问题讨论】:

  • 如果两个表中都存在一行,它应该在结果中出现一次还是两次?
  • 你能假设一个包含另一个吗?
  • 我认为这个页面很好地描述了问题和解决方案:simple-talk.com/sql/performance/…

标签: sql sql-server sql-server-2008


【解决方案1】:

假设您的列 CompanyServername 是可以是 DISTINCT 的数据类型,您可以使用 UNION 查询:

SELECT Company, Servername FROM tbl_backupchecks
UNION
SELECT Company, Servername FROM tbl_backupchecks_sqlbak

【讨论】:

    【解决方案2】:

    我认为工会应该为你做到这一点

       SELECT Company, ServerName
       FROM tbl_backupchecks
       UNION
       SELECT Company, ServerName
       FROM tbl_backupchecks_sqlbak
    

    【讨论】:

      【解决方案3】:

      使用联合:

      SELECT  Company, ServerName 
        FROM  tbl_backupchecks 
      UNION
      SELECT  Company, ServerName 
        FROM  tbl_backupchecks_sqlbak 
      

      【讨论】:

        【解决方案4】:

        我认为你想要一个 UNION:

        对于两个表之间的不同行,请使用:

        SELECT Company,ServerName
        FROM tbl_backupchecks
        UNION
        SELECT Company,ServerName
        FROM tbl_backupchecks_sqlbak
        

        对于两个表中的所有行(不会删除两个表中存在的重复行),请使用:

        SELECT Company,ServerName
        FROM tbl_backupchecks
        UNION ALL
        SELECT Company,ServerName
        FROM tbl_backupchecks_sqlbak
        

        【讨论】:

          【解决方案5】:
          SELECT Company, ServerName FROM tbl_backupchecks
          
          UNION
          
          SELECT Company, ServerName FROM tbl_backupchecks_sqlbak
          

          (如果要保留重复项,请将 UNION 更改为 UNION ALL。)

          【讨论】:

            【解决方案6】:

            如果您只想要两者的唯一记录,请使用:

            SELECT DISTINCT Company, ServerName
            FROM
            (
            SELECT Company, ServerName FROM tbl_backupchecks
            UNION
            SELECT Company, ServerName FROM tbl_backupchecks_sqlbak
            ) A
            

            【讨论】:

              【解决方案7】:

              这是一个解决方案,它还可以告诉您记录在哪里

              select Company, ServerName, sum(case when is_bak=0 then 0 else 1) as in_bak, sum(case when is_bak=0 then 1 else 0) as in_not_bak from (
              select Company, ServerName,0 as is_bak from tbl_backupchecks union 
              select  SELECT Company, ServerName, 1 as is_bak FROM tbl_backupchecks_SQLBak
              ) group by Company, ServerName
              

              【讨论】:

                【解决方案8】:

                我认为您想要两个表的联合。比如:

                SELECT Company, ServerName FROM tbl_backupchecks
                UNION 
                SELECT Company, ServerName FROM tbl_backupchecks_SQLBak
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-06-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-04-03
                  • 2018-01-14
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多