如果 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
我有四个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