【问题标题】:How to join a table multiple times using same column but related different tables? (Mysql)如何使用同一列但关联不同的表多次连接表? (Mysql)
【发布时间】:2013-07-18 21:56:51
【问题描述】:

我的场景是货运公司。我有 Shipments、Senders、Recievers 和 Cities 表。 Shipments 表包含 shipping_category、sender_id、reciever_id。 Cities 表包含 ID 和 city_name。 Sender 表保存 sender_id,sender_city 等于 city 表的 ID。 Recievers 表包含reciever_id 和reciever_city,它们等于city 表的ID。

我设法显示属于 category1 并且具有不同协调性的货物,并按城市 ID 对它们进行计数

From_City ||前往_城市 ||计数

1205 || 1346 || 7

我使用下面的代码:

SELECT  S.city AS From_City, R.city AS To_City , COUNT( * ) 
FROM Shipments Sh, Recievers R, Senders S
WHERE SH.category=1
AND SH.sender_id = S.ID
AND SH.reciever_id = R.ID
GROUP BY From_City, To_City
ORDER BY COUNT( * ) DESC 

我想要的是从如下城市表中按城市名称获取同一张表:

From_City ||前往_城市 ||数

巴黎 ||伦敦 || 7

注意: 请不要建议更改数据库表。这只是表达我的情况的一个例子。

【问题讨论】:

    标签: mysql join count


    【解决方案1】:

    试试这个:

    SELECT
        `sender_cities`.`city_name` AS `From_City`,
        `receiver_cities`.`city_name` AS `To_City`,
        COUNT(*) as `Count`
    FROM 
        `shipments` `ship`
        INNER JOIN `senders` `s` ON (`ship`.`sender_id` = `s`.`sender_city`)
        INNER JOIN `cities` `sender_cities` ON (`s`.`sender_city` = `sender_cities`.`city_id`)
        INNER JOIN `receivers` `r` ON (`ship`.`receiver_id` = `r`.`sender_city`)
        INNER JOIN `cities` `receiver_cities` ON (`r`.`receiver_city` = `receiver_cities`.`city_id`)
    GROUP BY 
        `From_City`,
        `To_City`
    ORDER BY 
        `Count` DESC
    

    【讨论】:

    • 你打败了我!这与我的回答几乎完全一致。
    • 你的答案在逻辑上会有什么不同吗?
    • 不,只有大写 MySQL 保留字和缩进代码,只是因为我讨厌凌乱的代码。这让我以后也很难阅读和快速理解。只是,我从 Hard Knocks 学校学到了一件事。
    • 我同意这一点。最好编写干净、可读和缩进的代码。
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2015-05-21
    • 2023-03-24
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多