繁体   English   中英

基于第三个表连接两个表(SQLite)

[英]Joining Two tables Based on Third Table (SQLite)

我正在尝试使用三个不同的表格来获取美国所有麦当劳的列表,按 100 英里内的汉堡王数量排序。 出于某种原因,我很难解决这个问题,我想知道是否有人可以就他们如何解决这样的问题提供任何建议?

我有一张包含所有麦当劳 zip 代码的表格,一张包含所有 zip 代码的表格以及汉堡王数量的表格,以及一张包含所有 zip 代码的表格,这些代码在 100 英里范围内。 例如:

Mcdonalds表:

姓名 zip
麦当劳公园露台 11121
麦当劳 HWY 103 11412
麦当劳克雷斯特伍德 11121
麦当劳彭德尔顿 26566
麦当劳史密斯维尔 67742
麦当劳 HWY 66 43351

BKzips表:

zip 编号BK
11121 2
11412 0
26566 6
43351 0
67742 3
... ...

zipproximity表:

zip1 zip2 之间的距离
11121 11412 23.443
11121 26566 48.211
... ... ...
11412 11121 23.443

我想要的最终结果是一个表格,每个麦当劳都有一行,列出了麦当劳 100 英里内的所有拉链及其 BK 总数。 例如:

麦当劳 zip zipsWithBKs 总BKs
麦当劳公园露台 11121 26566, 11412 6

我已经能够使用内部连接来获得一个表,其中每个 zip 带有 BK:

SELECT McDonalds.NAME, BKzips.zip, BKzips.numberBKs
FROM zipproximity
    INNER JOIN McDonalds
        ON zipproximity.zip1 = McDonalds.zip
    INNER JOIN BKzips 
        ON zipproximity.zip2 = BKzips.zip

但我不知道如何得到我想要的结果。 在没有 SQL 经验和解决这个问题几个小时之间,我非常卡住。 我很感激任何帮助!

几乎在那里,只有一个GROUP BY和一些聚合函数:

SELECT McDonalds.NAME, McDonalds.zip, GROUP_CONCAT(BKzips.zip, ', ') AS zipsWithBKs, SUM(BKzips.numberBKs) AS totalBKs
FROM zipproximity
    INNER JOIN McDonalds
        ON zipproximity.zip1 = McDonalds.zip
    INNER JOIN BKzips 
        ON zipproximity.zip2 = BKzips.zip
-- WHERE BKzips.numberBKs > 0   -- you probably want this also
GROUP BY McDonalds.NAME, McDonalds.zip;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM