【问题标题】:Common records from SQL tableSQL 表中的公共记录
【发布时间】:2019-11-28 04:32:08
【问题描述】:

我有 3 个表,分别称为 CompanyInfoIDInfoPersonalInfo

目标是获取P.[First Name], P.[Last Name], I.PAN, C.DOB

我可以使用左连接或右连接来满足这一点,但表的顺序可能会改变,因为它是某些工具的输入,用户可以按任何顺序输入表名,例如 user1 提到“CompanyInfo、IDInfo、PersonalInfo”, user2 提到了“IDInfo、PersonalInfo、CompanyInfo”等等。

表数据如下,有没有办法通过单个 SQL 查询(可能是联合)获取数据。假设我想获取 ID = 4 的数据,我应该得到:

FirstName LastName  PAN        DOB
User      Four      UAN44444   NULL

如果 ID = 3

FirstName LastName  PAN        DOB
User      THree     NULL       1987-12-08

公司信息表

ID  Company    OfficialEmail        EmpID     DOB          Department   Joining Date  Status
1   RBS        userone@rbs.co.uk    UK222222  1980-11-15   HR           2012-11-20    Inactive
3   Infosys    userthree@infy.com   IN333333  1987-12-08   Admin        2016-08-18    Inactive
5   IBM        userfive@us.ibm.com  US55555   1986-03-26   Finance      2014-06-26    Active
10  Samsung    userten@samsung.com  SK101010  1988-04-04   Admin        2013-04-07    Active

IDInfo 表

ID  UAN         TIN         PAN
2   UAN22222    TIN222222   PAN22222
4   UAN44444    TIN444444   PAN44444
5   UAN55555    TIN555555   PAN55555

个人信息表

ID  FirstName   LastName    PhoneNumber      City         Address            ZipCode    Email
1   User        One         +44-7432564125   London       United Kingdom     RG231FDT   userone@gmail.com
2   User        Two         +91-987654321    New Delhi    India              110006  usertwo@gmail.com
3   User        Three       +44-782136425    Guildford    United Kingdom     GUI74DS    userthree@gmail.com
4   User        Four        +1-230156428     Atlanta      United States      GA 30337   userfour@gmail.com
5   User        Five        +1-650324152     Houston      United States      TX 77077   userfive@gmail.com
6   User        Six         +91-8885552223   Mumbai       India              400012  usersix@gmail.com
7   User        Seven       +91-9998887771   Bangalore    India              560021  userseven@gmail.com

【问题讨论】:

  • SO 不是一个代码编写服务,请做一些研究,尝试一下,当卡住时发布你的尝试。
  • 试试我的答案。希望对你有帮助。

标签: sql sql-server sql-server-2012 ssms-2017


【解决方案1】:

简单的LEFT JOIN 将解决您的问题。

SELECT P.FirstName, P.LastName, I.PAN, C.DOB 
FROM PersonalInfo P
LEFT JOIN IDInfo I  ON I.ID = P.ID
LEFT JOIN CompanyInfo C ON C.ID = P.ID
WHERE P.ID = @YourInput

【讨论】:

    【解决方案2】:

    你可以使用左连接和右连接:

    SELECT P.FirstName, P.LastName, I.PAN, C.DOB. FROM IDInfo i LEFT JOIN PersonalInfo p ON p.ID = i.ID LEFT JOIN CompanyInfo c ON c.ID = i.ID WHERE i.ID = 3
    

    【讨论】:

      【解决方案3】:

      创建表变量来保存 3 个表的数据

      DECLARE @CompanyInfo TABLE 
      (ID INT,Company NVARCHAR(50),OfficialEmail NVARCHAR(50),EmpID NVARCHAR(50),DOB NVARCHAR(50),Department NVARCHAR(50),[Joining Date] NVARCHAR(50),[Status] NVARCHAR(50))
      
      DECLARE @IDInfo TABLE
      (ID INT,UAN NVARCHAR(50),TIN NVARCHAR(50),PAN NVARCHAR(50))
      
      DECLARE @PersonalInfo TABLE
      (ID INT,FirstName NVARCHAR(50),LastName NVARCHAR(50),PhoneNumber NVARCHAR(50),City NVARCHAR(50),[Address] NVARCHAR(50),ZipCode NVARCHAR(50),Email NVARCHAR(50))
      

      将数据填充到表中

      INSERT INTO @CompanyInfo VALUES
      (1,'RBS','userone@rbs.co.uk','UK222222','1980-11-15','HR','2012-11-20','Inactive'),
      (3,'Infosys','userthree@infy.com','IN333333','1987-12-08','Admin','2016-08-18','Inactive'),
      (5,'IBM','userfive@us.ibm.com','US55555','1986-03-26','Finance','2014-06-26','Active'),
      (10,'Samsung','userten@samsung.com','SK101010','1988-04-04','Admin','2013-04-07','Active')
      
      INSERT INTO @IDInfo VALUES
      (2,'UAN22222','TIN222222','PAN22222'),
      (4,'UAN44444','TIN444444','PAN44444'),
      (5,'UAN55555','TIN555555','PAN55555')
      
      INSERT INTO @PersonalInfo VALUES
      (1,'User','One','+44-7432564125','London','United Kingdom','RG231FDT','userone@gmail.com'),
      (2,'User','Two','+91-987654321','New Delhi','India','110006','usertwo@gmail.com'),
      (3,'User','Three','+44-782136425','Guildford','United Kingdom','GUI74DS','userthree@gmail.com'),
      (4,'User','Four','+1-230156428','Atlanta','United States','GA 30337','userfour@gmail.com'),
      (5,'User','Five','+1-650324152','Houston','United States','TX 77077','userfive@gmail.com'),
      (6,'User','Six','+91-8885552223','Mumbai','India','400012','usersix@gmail.com'),
      (7,'User','Seven','+91-9998887771','Bangalore','India','560021','userseven@gmail.com')
      

      查询以获得所需的输出

      SELECT 
          P.FirstName, 
          P.LastName, 
          I.PAN, 
          C.DOB 
      FROM 
          @PersonalInfo P LEFT JOIN @IDInfo I  ON I.ID = P.ID
          LEFT JOIN @CompanyInfo C ON C.ID = P.ID
      WHERE 
          P.ID = 4
      

      输出:-

      FirstName   LastName    PAN         DOB
      User        Four        PAN44444    NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-06
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多