返回不在查询中的记录

时间:2014-03-12 17:29:11

标签: sql db2

我有这个问题:

SELECT *
FROM Table.Diet
WHERE Diet.Date NOT IN (

SELECT Diet.Date
FROM Table.Diet
WHERE Diet.FruitsEatenToady = 'Banana'
Group BY Diet.Date)

许多水果可以在一天内食用。

但是查询回来了几天吃了香蕉。

我是db2的新手还有另外一种我可以用来不用的语法吗?也许是一些分组?

由于

编辑饮食表格布局

  DATE-----FruitsEatenToday--Calories
  3/11/2014|Apple          | 116
  3/11/2014|Banana         | 106

编辑2完全屠杀第一个查询更新了它

2 个答案:

答案 0 :(得分:1)

我认为你想要没有吃香蕉的日子。现在编写查询时,以下内容似乎有效:

select *
from table.diet
where not exists (select 1
                  from table.diet
                  where Diet.FruitsEatenToady = 'Banana'
                 );

今天吃香蕉时,这将返回table.diet中的所有行。如果没有吃香蕉,它将不返回任何行。

这似乎是一个非常奇怪的数据结构。我希望看到一个有日期列和水果列的表,指定吃水果的日期。

答案 1 :(得分:1)

根据您的表结构和查询要求,您看起来需要一个反连接:

SELECT d1.*
FROM Table.Diet AS d1
LEFT JOIN Table.Diet AS d2
ON d1.Date = d2.Date
AND d1.FruitsEatenToday <> d2.FruitsEatenToday
AND d2.FruitsEatenToday = 'Banana'
WHERE d2.FruitsEatenToday IS NULL