没有派生表的查询

时间:2016-09-05 07:20:09

标签: mysql jpa-2.0

我有两个表平和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查询中转换相同的内容。

2 个答案:

答案 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;

See Demo

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;

See Demo

答案 1 :(得分:1)

我认为这就是你需要的东西?

res2: Array[(String, String)] = Array((905067378709,905458844980))