如果 foreign_key id 存在,如何连接两个表和 return 所有列值,或者如果 SQL 服务器中不存在外键 id,如何连接 return null?

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?

我有四个table

applicationmaster, projectdetails, clientdetails, employeedetails

我有一个存储过程 return 通过连接这四个 table 所有列,例如 - applicationmaster 可能有雇员,也可能没有雇员。

applicationmaster 和员工详细信息都映射到 app_id。我想从 employeedetails table 中检索所有数据,如果 app_id 存在,如果不存在,则 return 所有员工详细信息列为 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

但是我的存储过程 return 只处理来自 applicationmaster table 的那些有雇员的行。

就像只有前两行从我的存储过程中得到 returned。

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 查询

谢谢

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

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