我有2个表,我需要使用这些表来根据一些条件获取相关条目。
表A(id 是主键)如下所示
id | name | age | status
id1 | name1 | age1 | n
id2 | name2 | age2 | n
id3 | name3 | age3 | n
id4 | name4 | age4 | n
表B(id & country 是组合主键,id 是两个表中的公共列)如下所示
id | country
id1 | country1
id1 | country2
id2 | country1
id3 | country2
id4 | country1
现在,我想在这两个表上使用一个连接,以从表A中获取条目,条件是表B中的条目包含country 1,但不包含country 2。换句话说,根据两个表中的数据,所需的输出将是
id | name | age | status
id2 | name2 | age2 | n
id4 | name4 | age4 | n
因此,此处id 1不是输出的一部分,因为表B中的条目中包含id 1的country 1和country 2。
我正在使用spring data JPA和@Query来执行我的查询(在postgres数据库上)。
我最初的想法是像这样链接多个AND语句
select entryA
from tableA entryA
left join tableB entryB on entryA.id = entryB.id
where entryB.country <> 'country1'
and entryB.country = 'country2'
然而,这并不起作用(我仍然将id 1条目视为我的最终输出)。
我还尝试使用CASE IF END,如下所示
select entryA
from tableA entryA
left join tableB entryB on entryA.id = entryB.id
where case if entryB.country <> 'country1' then true
else false
end
and entryB.country = 'country2'
但这不起作用,因为CASE END不应该出现在WHERE之后(从我得到的异常判断)。我试图移动它,在我的查询中放置在不同的地方,但我从来没有设法使它工作。
我还尝试在CASE END参数内的查询中使用COUNT,但仍然无法确定如何组织查询。
我最大的问题是我不知道如何把不同的查询放在一起,在一个查询。我觉得与计数,CASE结束和左连接是可行的。我只是不能把它放在一起,似乎。
所以我的问题是:首先,我想在一个查询中实现的功能是否可以实现(如果不能使用JPA,那么使用原生查询是否可以实现)?如果可以,我做错了什么?正确的查询是什么?
1条答案
按热度按时间sd2nnvve1#
您可以将上述查询用于您任务