【问题标题】:Not sure where I went wrong on a sql join不知道我在 sql join 上哪里出错了
【发布时间】:2015-06-04 21:14:39
【问题描述】:

我做的最多的编程是shell脚本或者一些python或者perl,所以google了一下之后有了基本的了解。关于我在做什么的一点背景。我们有两个库存系统:我们的和他们的。我需要从他们的中提取信息以与我们的进行比较。

问题:我们需要 UPC 来做库存,而他们在每月库存报告中提供 SKU。

解决方案:加入 3 个表。我正在使用 phpmyadmin 在最近安装的 Debain Wheezy 上管理 mysql 后端。

第一个查询获取他们库存中的每个 SKU,将其与他们列表中的 UPC 进行比较,并且由于并非每个“UPC”实际上都是 UPC,因此将其与我们列表中的 UPC 进行比较。它看起来像这样:

SELECT TheirListings.upc,  SUM(TheirInventory.quantity)
FROM TheirInventory
JOIN TheirListings
ON TheirListings.sku =  TheirInventory.sku
JOIN OurListings
ON TheirListings.upc = OurListings.Upc
GROUP BY TheirListings.upc
ORDER BY TheirListings.upc

而且它似乎运作良好。我们的系统对此感到满意,这让我很高兴,因为这将手动输入减少了 96%。现在我需要得到所有这些没有捕捉到的东西:需要手动输入的 4%。为简洁起见,我们的表格缩短如下:

TheirListings       TheirInventory      OurListings
upc                 sku                 upc
sku                 quantity        

我需要选择所有 SKU 和相关数量:

SELECT TheirInventory.sku,  SUM(TheirInventory.quantity)
FROM  TheirInventory
LEFT OUTER JOIN TheirListings
ON TheirListings.sku =  TheirInventory.sku
LEFT OUTER JOIN OurListings
ON TheirListings.upc = OurListings.upc
WHERE OurListings.upc IS NULL
OR TheirListings.upc IS NULL
GROUP BY TheirInventory.sku
ORDER BY TheirInventory.sku

为了仔细检查它是否捕获了剩余部分,我为这两个查询执行了 SELECT COUNT(TheirInventory.sku) 并返回了 sku 的总数。添加我的两个查询让我比预期的多 1 个。我不确定我哪里出错了。

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    我猜的第一件事是他们不在同一个数据集上工作。如果您在几天前运行了第一个,可能是某些数据发生了变化,导致它出现在第二个查询中?

    如果没有,我会做的是

    SELECT SKU
    FROM TheirInventory
    WHERE SKU IN (<1st query>)
      AND SKU IN (<2nd query>)
    

    这将告诉您两者都出现了什么,您可以从那里进行诊断。

    【讨论】:

    • 这是一个新的数据集。我们每月都会收到这些报告。我今天早些时候从我们的和他们的列表中导出了新数据。不过我会试试这个。
    • 我可怜的桌面!我很快就会在更好的硬件上运行这个查询。
    • 我运行了查询。不幸的是,它返回了一个空结果。我将不得不忍受少量的错误
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多