【问题标题】:How to join two tables and return all column values if foreign_key id present or return null if foreign key id not present in SQL Server?如果外键 id 存在,如何连接两个表并返回所有列值,如果 SQL Server 中不存在外键 id,如何返回 null?
【发布时间】:2020-10-15 20:47:48
【问题描述】:

我有四张桌子

applicationmaster, projectdetails, clientdetails, employeedetails

我有一个存储过程,可以通过加入这四个表来返回所有列,例如 - applicationmaster 可能有雇员,也可能没有雇员。

applicationmaster 和员工详细信息都使用 app_id 进行映射。如果 app_id 存在,我想从 employeedetails 表中检索所有数据,如果不存在,则为员工详细信息的所有列返回 null

  applicationmaster                                   employeedetails

  app_id | app_name | cotractor                       emp_id | app_id | emp_name | emp_designation
   1         BPM       X                              101        1      Tony           Manager
   2         CRM       Y                              102        1      Mark           Consultant
   3         Portal    Z 

在这里,我有两个 app_id 1 的员工。所以我想检索如下:

   1  BPM   X   101     Tony    Manager
   1  BPM   X   102     Mark    Consultant
   2  CRM   Y   null    null    null
   3  Portal Z  null    null    null

但我的存储过程只返回具有雇员的 applicationmaster 表中的那些行。

就像我的存储过程只返回前两行一样。

ALTER PROCEDURE [dbo].[sp_Dashboard_SowReport]
AS  
BEGIN 
    SELECT
        am.app_id AS 'App Id',
        cd.app_name AS 'App Name',
        cd.scheduler_name AS 'Scheduler Name',
        pd.project_name AS 'Project Name',
        pd.Project_id AS 'Project Id',
        MONTH(am.app_end_date) AS 'App Expiring Month',
        DATEDIFF(Day,am.app_start_date,am.app_end_date) AS 'Contract due in days',
        ed.associate_name AS 'Associate Name',
        ed.emp_id AS 'EID',
        ed.client_id AS 'Client Id',
        ed.bill_rate_per_hour AS 'Bill Rate'
    FROM
        applicationMaster am
    JOIN
        projectdetails pd ON (am.project_id = pd.project_id)
    JOIN
        clientdetails cd ON (cd.client_id = pd.client_id)
    JOIN 
        employeedetails ed ON (ed.app_id = am.app_id)
END

有人可以帮我吗?我正在学习编写和优化 SQL 查询

谢谢

【问题讨论】:

标签: sql sql-server select left-join sql-server-2016


【解决方案1】:

您正在描述left join。您的查询和您的示例数据没有正确关联 - 对于您的示例数据,这将是:

select m.*, e.emp_name, e.emp_designation
from applicationmaster m
left join employeedetails e on e.app_id = a.app_id

【讨论】:

  • 天哪,我错过了这个左连接。非常感谢您的专线小巴
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2020-05-06
相关资源
最近更新 更多