Mysql 内部联接中空值的SQL if语句
我正在编写一个如下所示的存储过程:Mysql 内部联接中空值的SQL if语句,mysql,sql,Mysql,Sql,我正在编写一个如下所示的存储过程: SELECT Positions.PositionId ,Positions.Title ,Positions.Location ,Positions.Description ,Positions.MaximumSalary ,PositionsDepartments.Description Department ,PositionsSubDepartments.Description Subdepar
SELECT
Positions.PositionId
,Positions.Title
,Positions.Location
,Positions.Description
,Positions.MaximumSalary
,PositionsDepartments.Description Department
,PositionsSubDepartments.Description Subdepartment
,PositionsDepartments.DepartmentId DepartmentId
,PositionsSubDepartments.SubDepartmentId SubdepartmentId
,@TheRole TheRole
,@Essentials Essentials
,@Desirable Desirable
,Positions.Published
,Positions.LastUpdatedDate
,PositionsStatus.Description Status
FROM
Positions
WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
INNER JOIN PositionsSubDepartments ON Positions.SubDepartmentId = PositionsSubDepartments.SubDepartmentId
INNER JOIN PositionsDepartments ON PositionsSubDepartments.DepartmentId = PositionsDepartments.DepartmentId
WHERE
Positions.PositionId = @PositionId
但是Positions.SubDepartmentId现在可以为空-这意味着我没有得到我期望的所有数据。我已尝试过此操作,但返回了大量重复数据:
SELECT
Positions.PositionId
,Positions.Title
,Positions.Location
,Positions.Description
,Positions.MaximumSalary
,PositionsDepartments.Description Department
,PositionsSubDepartments.Description Subdepartment
,PositionsDepartments.DepartmentId DepartmentId
,PositionsSubDepartments.SubDepartmentId SubdepartmentId
,@TheRole TheRole
,@Essentials Essentials
,@Desirable Desirable
,Positions.Published, Positions.LastUpdatedDate
,PositionsStatus.Description Status
FROM
Positions
WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
INNER JOIN PositionsSubDepartments ON Positions.SubDepartmentId = PositionsSubDepartments.SubDepartmentId OR ( Positions.SubDepartmentId IS NULL)
INNER JOIN PositionsDepartments ON PositionsSubDepartments.DepartmentId = PositionsDepartments.DepartmentId
WHERE
Positions.PositionId = @PositionId
我做错了什么?当条目可能为空时,您需要使用左连接
select Positions.PositionId, Positions.Title, Positions.Location,Positions.Description,Positions.MaximumSalary,
PositionsDepartments.Description Department, PositionsSubDepartments.Description Subdepartment, PositionsDepartments.DepartmentId DepartmentId, PositionsSubDepartments.SubDepartmentId SubdepartmentId,
@TheRole TheRole, @Essentials Essentials, @Desirable Desirable,
Positions.Published, Positions.LastUpdatedDate, PositionsStatus.Description Status
FROM Positions
WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
LEFT JOIN PositionsSubDepartments ON Positions.SubDepartmentId = PositionsSubDepartments.SubDepartmentId
LEFT JOIN PositionsDepartments ON PositionsSubDepartments.DepartmentId = PositionsDepartments.DepartmentId
WHERE Positions.PositionId = @PositionId
SELECT
Positions.[PositionId]
,Positions.[Title]
,Positions.[Location]
,Positions.[Description]
,Positions.[MaximumSalary]
,PositionsDepartments.[Description] Department
,PositionsSubDepartments.[Description] Subdepartment
,PositionsDepartments.[DepartmentId] DepartmentId
,PositionsSubDepartments.[SubDepartmentId] SubdepartmentId
,@TheRole TheRole
,@Essentials Essentials
,@Desirable Desirable
,Positions.[Published]
,Positions.[LastUpdatedDate]
,PositionsStatus.[Description] Status
FROM
Positions WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
LEFT JOIN PositionsSubDepartments ON Positions.SubDepartmentId = PositionsSubDepartments.SubDepartmentId
LEFT JOIN PositionsDepartments ON PositionsSubDepartments.DepartmentId = PositionsDepartments.DepartmentId
WHERE
Positions.PositionId = @PositionId
您可能还会发现以下内容很有用:当条目可能为空时,您需要使用左连接
SELECT
Positions.[PositionId]
,Positions.[Title]
,Positions.[Location]
,Positions.[Description]
,Positions.[MaximumSalary]
,PositionsDepartments.[Description] Department
,PositionsSubDepartments.[Description] Subdepartment
,PositionsDepartments.[DepartmentId] DepartmentId
,PositionsSubDepartments.[SubDepartmentId] SubdepartmentId
,@TheRole TheRole
,@Essentials Essentials
,@Desirable Desirable
,Positions.[Published]
,Positions.[LastUpdatedDate]
,PositionsStatus.[Description] Status
FROM
Positions WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
LEFT JOIN PositionsSubDepartments ON Positions.SubDepartmentId = PositionsSubDepartments.SubDepartmentId
LEFT JOIN PositionsDepartments ON PositionsSubDepartments.DepartmentId = PositionsDepartments.DepartmentId
WHERE
Positions.PositionId = @PositionId
您可能还会发现以下内容很有用:修复了它-感谢您的帮助:
select Positions.PositionId, Positions.Title, Positions.Location, Positions.Description, Positions.MaximumSalary, Positions.DepartmentId, Positions.SubDepartmentId,
PositionsDepartments.Description Department, PositionsSubDepartments.Description Subdepartment, PositionsSubDepartments.SubDepartmentId SubdepartmentId,
@TheRole TheRole, @Essentials Essentials, @Desirable Desirable,
Positions.Published, Positions.LastUpdatedDate, PositionsStatus.Description Status
FROM Positions
WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
LEFT JOIN PositionsSubDepartments
ON PositionsSubDepartments.SubDepartmentId = Positions.SubDepartmentId OR (Positions.SubDepartmentId IS NULL AND PositionsSubDepartments.SubDepartmentId IS NULL)
LEFT JOIN PositionsDepartments
ON Positions.DepartmentId = PositionsDepartments.DepartmentId
WHERE Positions.PositionId = @PositionId
已修复-感谢您的帮助:
select Positions.PositionId, Positions.Title, Positions.Location, Positions.Description, Positions.MaximumSalary, Positions.DepartmentId, Positions.SubDepartmentId,
PositionsDepartments.Description Department, PositionsSubDepartments.Description Subdepartment, PositionsSubDepartments.SubDepartmentId SubdepartmentId,
@TheRole TheRole, @Essentials Essentials, @Desirable Desirable,
Positions.Published, Positions.LastUpdatedDate, PositionsStatus.Description Status
FROM Positions
WITH (NOLOCK)
INNER JOIN PositionsStatus ON Positions.StatusId = PositionsStatus.StatusId
LEFT JOIN PositionsSubDepartments
ON PositionsSubDepartments.SubDepartmentId = Positions.SubDepartmentId OR (Positions.SubDepartmentId IS NULL AND PositionsSubDepartments.SubDepartmentId IS NULL)
LEFT JOIN PositionsDepartments
ON Positions.DepartmentId = PositionsDepartments.DepartmentId
WHERE Positions.PositionId = @PositionId