mysql - 没有派生表的查询

标签 mysql jpa-2.0

我有两个表 flat 和 usertoflat 我想在 usertoflat 表上使用 where 条件从平面表中获取所有数据。

我正在使用 JPA 但我没有在 jpa 中找到派生表查询,下面是我的 native 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 中找到派生表,所以如果我可以获得 native sql 查询,我将在 JPA 查询中转换它。

最佳答案

您可以简单地进行左连接而不是创建子查询

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

关于mysql - 没有派生表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325566/

相关文章:

mysql - 如果关系表可能驻留在多个数据库中,是否有必要以不同的方式设计它们?

java - Spring NullPointerException 服务

java - 参数化 native 查询返回空结果集 [参数为逗号分隔字符串](使用 JPA)

mysql - 如何在 Eloquent Query Builder (Laravel 4) 中按 "SUM"排序

mysql - 无法连接到 AWS 实例中的 MySQL 端口

javascript - 动态图片 slider 解决方案

PHP & MySQL , 获取表

java - Tomcat 中 JPA+Spring+Hibernate 的容器管理事务

java - jpa 获取连接查询

java - JPA 外键 - 如有必要插入新记录?