我有两个表平和usertoflat我想从平面表中获取所有数据与usertoflat表中的条件。
我正在使用JPA,但我没有在jpa中发现派生表查询是我的本机SQL查询。
Table Flat
flat_id | flat_no | status
1 | 1001 | 1
2 | 1002 | 1
3 | 1003 | 1
4 | 1004 | 1
Table usertoflat
usertoflat_id | Name | flat_id | status
1 | ABC | 1 | 1
2 | ABC | 1 | 2
3 | XYZ | 2 | 1
4 | PQR | 3 | 1
Required output
flat_id | flat_no | Name
1 | 1001 | ABC
2 | 1002 | XYZ
3 | 1003 | PQR
4 | 1004 |
使用派生表进行查询
select f.flat_id, f.flat_no, uf.name from flat f left join
(select * from usertoflat where status = 1 )
as uf on f.flat_id = uf.flat_id
如何在不使用派生表的情况下实现相同功能,因为我使用的是JPA,而且我没有在JPA中找到派生表,所以如果我能获得本机sql查询,我将在JPA查询中转换相同的内容。
答案 0 :(得分:4)
您只需创建左连接而不是创建子查询
SELECT
f.flat_id,
f.flat_no,
uf.name
FROM flat f
LEFT JOIN usertoflat uf ON f.flat_id = uf.flat_id AND uf.status = 1;
或强>
SELECT
f.flat_id,
f.flat_no,
uf.name
FROM flat f
LEFT JOIN usertoflat uf ON f.flat_id = uf.flat_id
WHERE uf.status IS NULL OR uf.status = 1;
答案 1 :(得分:1)
我认为这就是你需要的东西?
res2: Array[(String, String)] = Array((905067378709,905458844980))