【问题标题】:Mysql - Fetch row from join table based on the value from main tableMysql - 根据主表中的值从连接表中获取行
【发布时间】:2018-04-17 04:29:46
【问题描述】:

我在 MySQL 数据库中有两个表,如下所示:

服务:

service_id |userid      | service_name | pending  | accepted|completed 
-----------+------------+--------------+----------+---------+--------
1          | 1          |  Spa         | 1        |0        |0
2          | 2          |  Cleaning    | 0        |1        |0
3          | 3          |  General     | 1        |0        |0

request_status:(id为主键)

id  |  service_id   | Userid |  status      | accepted_date 
----+---------------+--------+--------------+---------------
1   |  1            |  1     |  Pending     | 2018/03/02
2   |  2            |  2     |  Pending     | 2018/03/02
3   |  2            |  2     |  Accepted    | 2018/03/05
4   |  3            |  3     |  Pending     | 2018/03/06

输出

service_id   | service_name | userid|  Status    | Date
-----------+----------------+-------+------------+------------+---------
1          | Spa            | 1     |  Pending   | 2018/03/02
2          | Cleaning       | 2     |  Accepted  | 2018/03/05
3          | General        | 3     |  Pending   | 2018/03/06

对于每个服务用户选择,状态将在另一个表请求状态中更新。

我希望输出与每个服务的状态连接 2 个表。例如。对于服务 ID 2,它已被接受,因此它在第二个表中有 2 个条目。 我尝试使用 join ,但它同时获取待处理和已接受的服务 2,它应该只获取一个。

SELECT a.*, b.* FROM service a left outer join request_statusb on a.service_id =b.service_id

如何做到这一点。?请帮忙

【问题讨论】:

  • 您正在寻找JOIN。在这方面你有tried anything so far吗?
  • 您至少应该尝试一下或发布您的想法。
  • 通过服务ID和用户ID获取请求状态表中的ID,最大日期组。然后加入服务表以获取服务名称。

标签: mysql


【解决方案1】:

试试这个

SELECT a.*, b.* 
FROM service a 
INNER JOIN request_status b ON a.service_id = b.service_id 
WHERE b.id = (SELECT max(id) FROM request_status rs WHERE rs.service_id = a.service_id)

【讨论】:

  • 非常感谢。它的完美
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2022-12-17
  • 2020-09-30
  • 2020-12-11
相关资源
最近更新 更多