我有一张包含fk,pk和日期的表格。每个外键都有许多带有日期的fk行。
我正在尝试选择具有多个日期的不同fk值。
SELECT DISTINCT table.fk
FROM table
WHERE table.date = 'date1'
AND table.date = 'date2'
AND table.date = 'date3'
它适用于一个日期,但是当我添加任何其他AND时,它不会返回任何结果。我知道我要求有多个日期的fks。
当我查看单个日期的查询计划时,它看起来不错,我有所有正确的索引,当我查看多个日期的查询计划时,它只显示“常量扫描”,这是查询成本的100%和一个0%的SELECT。
我也尝试使用相同的谓词选择pk,但我得到相同的空结果集。
答案 0 :(得分:2)
当然,date
不能同时为date1
和date2
。我想你需要这个:
WHERE table.date = 'date1'
OR table.date = 'date2'
OR table.date = 'date3'
或
WHERE table.date IN ('date1', 'date2', 'date3')
答案 1 :(得分:1)
我认为这就是你所要求的 这将是具有所有三个日期(不是三个中的任何一个)的fk 这将包括具有所有三个日期的fk和具有所有三个日期和附加日期的fk。
select fk
from table
where date in ('date1','date2','date3')
group by fk
having count(distinct(date)) = 3
如果表中的pk是fk,date那么你可以使用count(*)
你也可以用连接或交叉来做,但这是最简单的(我认为)
A一次只评估一行的情况
Date = date1和Date = date2将始终为false(如果date1<> date2)
答案 2 :(得分:0)
如果您通过了不同的日期,则不可能匹配多次。
例如:
WHERE table.date = '20140410'
AND table.date = '20130410'
AND table.date = '20120410'
你无法达到这个条件。
使用table.date IN('date1','date2','date3')代替