Sql 当我有空值时,如何在联接中使用distinct

Sql 当我有空值时,如何在联接中使用distinct,sql,sql-server,Sql,Sql Server,我有一张包含以下内容的表格: 我有一个疑问: select sc.*,df.Name,foods.FoodName from R_Schedule as sc left join R_DaysOfWeek as df on sc.DayId=df.DayId join R_Foods as foods on sc.FoodId=foods.FoodId where sc.dayId=6 or sc.dayId is null 我得到这个结果: 而不是: 我想得到所有的记录,但不重复的

我有一张包含以下内容的表格:

我有一个疑问:

select sc.*,df.Name,foods.FoodName
from R_Schedule as sc
  left join R_DaysOfWeek as df on sc.DayId=df.DayId
  join R_Foods as foods on sc.FoodId=foods.FoodId
where  sc.dayId=6 or sc.dayId is null
我得到这个结果:

而不是:

我想得到所有的记录,但不重复的食物id。我的查询返回具有相同食物id的两行。 我想用不同的方法,但我得不到任何答案

我该怎么做

:

您可以使用行号来获得所需的内容

SELECT data.*
FROM
    (
      SELECT 
           sc.*,df.Name,foods.FoodName ,ROW_NUMBER() OVER(PARTITION BY foods.foodID ORDER BY sc.ScheduleID) as rn
      FROM R_Schedule as sc
       left join R_DaysOfWeek as df on sc.DayId=df.DayId
       join R_Foods as foods on sc.FoodId=foods.FoodId 
      where  sc.dayId=6  
    ) AS data
WHERE
  data.rn = 1

sc.dayId不是null有时我需要在dayId为null时获取一些行。您可以使用data@WorkSmarter我加了一张新照片。请看。谢谢。您如何决定保留这两行中的哪一行。其中一个没有空值?我运行了您的代码,但得到了以下错误:为“data”多次指定了列“DayId”。为什么不关心sc.DayId=null?因为条件OP试图筛选出可能会给他结果的行。但这不是OP的问题所在。如果您阅读查询并与他提供的数据进行比较,您就可以理解它。这个答案只适用于您希望保留的行中数字较低的行。这真的适用于所有情况吗?