Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 内部联接中空值的SQL if语句_Mysql_Sql - Fatal编程技术网

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