mysql - 复杂连接(Joining Joins)

标签 mysql sql join left-join inner-join

我有 4 个表:booking、address、search_address 和 search_address_log

表:(相关列)

预订:(pickup_address_id, dropoff_address_id)

地址:(address_id,邮政编码)

search_address: (address_id, postcode)

search_address_log: (id, from_id, to_id)


我需要做的是从 booking 和 search_address_log 中获得一个计数 按接送和从/到邮政编码分组。

我可以为每个单独执行此操作,即:

预订:

SELECT
a1.postcode b_From,
a2.postcode b_to,
COUNT(*) b_count
FROM booking b
INNER JOIN address a1 ON b.pickup_address_id = a1.address_id
INNER JOIN address a2 ON b.destination_address_id = a2.address_id
GROUP BY b_From, b_To
ORDER BY COUNT(*) DESC
LIMIT 10

搜索地址日志:

SELECT
sa1.postcode s_From, 
sa2.postcode s_To,
COUNT(*) s_count
FROM search_address_log sal
INNER JOIN search_address sa1 ON sal.from_id=sa1.address_id
INNER JOIN search_address sa2 ON sal.to_id=sa2.address_id
GROUP BY s_From, s_To
ORDER BY COUNT(*) DESC
LIMIT 10

返回表如下:

|    b_To   b_From    b_count   ||     s_To   s_From    s_count   |
|    x      y         10        ||     x       y       50         |
|    a      b         5         ||     a       b       60         |

我需要什么:

|    To    From    b_count   s_count   |
|    x      y         10       50      |
|    a      b         5        60      |

谢谢,

乔治

最佳答案

从技术上讲,您需要的是全外连接,但 MySQL 不支持。然而,下面应该做你想做的——获取两列的每个 fromto 值的摘要:

SELECT b_from, b_to, sum(b_count) as b_count, sum(s_count) as s_count
FROM ((SELECT a1.postcode as b_From, a2.postcode as b_to, COUNT(*) as b_count, 0 as s_count
       FROM booking b INNER JOIN
            address a1
            ON b.pickup_address_id = a1.address_id INNER JOIN
            address a2
            ON b.destination_address_id = a2.address_id
       GROUP BY b_From, b_To
      ) UNION ALL
      (SELECT sa1.postcode as s_From, sa2.postcode as s_To, 0, COUNT(*) as s_count
       FROM search_address_log sal INNER JOIN
            search_address sa1
            ON sal.from_id = sa1.address_id INNER JOIN
            search_address sa2
            ON sal.to_id = sa2.address_id
       GROUP BY b_From, b_To
      )
     ) ft
GROUP BY s_From, s_to;

关于mysql - 复杂连接(Joining Joins),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432050/

相关文章:

mysql - "Multiple SELECT, INNER JOIN"SQL查询不起作用

mysql - 比较列表中的唯一值

24小时内不同状态的SQL总和按小时分组

sql - 按mysql工作批中的限制记录进行分组

python - Pandas 合并101

python - 有没有一种方法可以将某些值的数据从另一个表插入到一个表中?

php - 如何从mysql数据库在JPGraph中添加标题

java - ResultSet 无法与 Java 中的PreparedStatement 一起使用

PHP/MySQL 隐藏文件链接

整数字段中的sql注入(inject)