首页 > 解决方案 > 在 SQL 查询输出中包括没有值的行

问题描述

在我的数据库中运行以下查询SQL SERVER 2016

SELECT
    u.idnumber,
    gi.idnumber AS code,
    gg.finalgrade AS grade
FROM
    grades AS gg 
INNER JOIN grade_items AS gi ON gg.itemid = gi.id 
INNER JOIN users AS u ON gg.userid = u.id
WHERE gi.idnumber IN ('436','434','313','002','135')
AND (u.idnumber = 'JohnBrown-xyz123);

给了我这个结果:

-------------------------
idnumber    code    grade
-------------------------
John12558   313     96
John12558   135     83

如何为所有 5 个 gi.idnumber 包含一行,包括没有等级的行?

-------------------------
idnumber    code    grade
-------------------------
John12558   436
John12558   434
John12558   313     96
John12558   002
John12558   135     83

数据库表:

用户

身份PK

Grade_items

身份PK

等级_等级

Grade_grades.itemid FK (grade_items)

grade_grades.userid FK(用户)

标签: sqlsql-servertsqlsql-server-2016

解决方案


您可以使用value这样的构造:

select tt.idnumber, 
       t.idnumber AS code, 
       tt.grade 
from (values ('436'), ('434'), ('313'), ('002'), ('135')) t (idnumber) 
left join (select
                 u.idnumber,
                 gi.idnumber AS code,
                 gg.finalgrade AS grade
           from grades AS gg 
           inner join grade_items AS gi ON gg.itemid = gi.id 
           inner join users AS u ON gg.userid = u.id
           where u.idnumber = 'JohnBrown-xyz123') tt on left(tt.code, 3) = t.idnumber

如果,idnumber是数字类型,那么你不需要使用' '.


推荐阅读