【问题标题】:MySQL - Combine with SELECT two tablesMySQL - 结合 SELECT 两个表
【发布时间】:2014-04-02 22:51:10
【问题描述】:

我有这些表:

reg_movs:

regmovs_id      id_car             date               status    
   1              1         2014-02-02 16:00:00         0
   2              1         2014-02-02 16:12:00         5         
   3              2         2014-02-02 16:22:03         0
   4              2         2014-02-02 16:45:14         5

service_detail:

id          id_Car                date_updated           price     
1             1               2014-02-02 16:12:00        45.00    
2             2               2014-02-02 16:45:14        30.00     

我的意思是,当status=0 时,它会在我的SELECT QUERY 中设置开始时间。并且,当status=5 时,它将结束时间。

如何进行这样的查询:

id_car     date         start         end                 price
  1     2014-02-02     16:00:00    16:12:00               45.00
  2     201-02-02      16:22:03    16:46:14               30.00

【问题讨论】:

  • 不清楚您要达到的目标。你想要一个返回某种形式的结果集的SELECT 语句吗?
  • 这样的? SELECT start as time_somethingorother FROM reg_movs INNER JOIN service_detail USING (id_car) WHERE status=0 UNION SELECT end as time_somethingorother FROM reg_movs INNER JOIN service_detail USING (id_car) WHERE status=5

标签: mysql join union


【解决方案1】:

您需要先在 reg_movs 上进行自联接,以将两行合并为一行。然后你需要用 service_detail 内部加入这个来选择汽车的价格。以下是基于为架构提供的信息的示例查询。

SELECT t1.id_car
    , DATE_FORMAT(t1.date, '%Y-%m-%d') AS date
    , DATE_FORMAT(t1.date, '%T') AS start
    , DATE_FORMAT(t2.date, '%T') AS end
    , service_detail.price 
FROM reg_movs AS t1 
    inner join reg_movs AS t2 on t1.id_car=t2.id_car AND t1.status=0 AND t2.status=5
    inner join service_detail ON t1.id_car=service_detail .id_car

如果您想显示没有结束时间的记录(即它们在表中只有一条状态为 0 的记录),您可能需要更改查询以使用左连接

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2015-08-30
    • 2012-11-16
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多