mysql - 如何使用 SQL 查询的结果作为另一个查询中的字段

标签 mysql sql database database-design

我有 2 张 table

  • 出租
  • 实体

实体持有有关可出租元素的信息(租赁护理) Rentals 保存实体特定租赁的信息,它通过外键链接到实体的 id:

表:实体

--------------------------
| id |      name         |
--------------------------
| 1  | Toyota Spacewagon |
| 2  | Volvo SuperCar    |

表:租金

---------------------------------------------------------------
| id | entity_id |  rental_date         | return_date         | 
---------------------------------------------------------------
|  1 |      1    |  2016-06-30 12:00:00 | 2016-07-01 12:00:00 | 
|  2 |      1    |  2016-06-28 12:00:00 | 2016-07-30 10:00:00 | 
|  3 |      1    |  2016-05-30 09:00:00 | 2016-06-01 13:00:00 |     

我想要做的是获取所有实体的列表,以及它们的最后租赁日期(以确定它们当前的租赁状态),但是我不知道如何用 SQL 表达这一点。

我的预期结果:

-------------------------------------------------
| id |      name         |    rental_date       | 
-------------------------------------------------
| 1  | Toyota Spacewagon |  2016-06-30 12:00:00 |
| 2  | Volvo SuperCar    | (null)               |

从未租赁过的实体应在租赁日期返回 null,已租赁的汽车应有最后一次租赁

与此类似的东西,但具有有效的语法......

SELECT id, name rental_date AS (SELECT rental_date FROM rentals WHERE entity_id = THIS_ROW'S_ENTITY) FROM entities;

最佳答案

这样的事情应该有效:

SELECT e.Id,e.name,r.rental_date
FROM entities e
LEFT JOIN
(
   SELECT entity_id,MAX(rental_date) AS rental_date
   FROM rentals
   GROUP BY entity_id
) r ON r.entity_id=e.Id

关于mysql - 如何使用 SQL 查询的结果作为另一个查询中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147055/

相关文章:

c++ - my_thread_global_end 线程没有退出,错误?

MySQL SUM 通过 if 语句

sql - 如何分割字符串并将数据与数字和文本以及其他条件分开

database - 为每个外键单独自增

PHP:每 10 秒检查一次 mysql 数据库是否有任何新行

php - 如何将查询的值分配给 zend 中的变量

MySQL - 基于多列不起作用的百分比增加

SQL 将数组列转换为数组中具有旧键的行

sql - 将 varchar 值转换为 smallint 数据类型时转换失败

python - 处理列中的多个值