不确定如何标题,请随时重新标注。
我有两张表有一对多的关系。
表1
|ID|NAME|...|
表2
|ID|Table1_ID|StartDate|EndDate|
我正在尝试编写一个查询,给定日期将返回以下内容
|TABLE1.ID|TABLE1.NAME|are any rows of table 2 in date|
我在表1和表2之间有一对多。我想将日期传递给查询。如果表2中的许多关系中的任何一个具有开始日期<通过日期和结束日期>传递的日期或结束日期为null然后我希望结果的第3列为true。在其他地方,我希望它是假的。
考虑示例
|ID|NAME|...|
| 1|APPLE| ...|
| 2|PEAR| ...|
表2
|ID|Table1_ID|StartDate|EndDate|
|1|1|01-01-2014|null|
|2|1|01-01-2014|01-02-2014|
|3|2|01-01-2014|01-02-2014|
我试图在SQL中执行此操作以最终转换为JPA。如果有任何JPA功能可以做到这一点,那么这将是很好的知道。否则我会做一个原生查询
任何指针都会很棒!
由于
答案 0 :(得分:0)
这可以给你你想要的东西:
select x.*, 'PASS' as checker
from table1 x
where exists
(select 'x'
from table2 y
where y.table1_id = x.table1_id
and y.startdate <= '01-01-2014'
and (y.enddate >= '01-01-2014' or y.enddate is null))
union all
select x.*, 'FAIL' as checker
from table1 x
where not exists
(select 'x'
from table2 y
where y.table1_id = x.table1_id
and y.startdate <= '01-01-2014'
and (y.enddate >= '01-01-2014' or y.enddate is null))
答案 1 :(得分:0)
我不知道我是否理解你的问题。 所以,请耐心等待......;)
尝试这样的事情:
select t1.id, t1.name,
case when t2.Table1_ID is null
then 'false'
else 'true' end as boolean_value
from Table1 t1,
(select distinct Table1_ID
from Table2
where yourdate >= StartDate
and (yourdate <= EndDate or EndDate is null) t2
where t1.id = t2.id (+);