【问题标题】:SELECT from table where a field does not exist in an item master table从项目主表中不存在字段的表中选择
【发布时间】:2013-01-24 19:17:57
【问题描述】:

我在 MSSQL 中有一个项目主表,其中包含 SKU 和与给定 SKU 关联的所有颜色:

SKU | Color  
-----------
100 | BLK
100 | GRN
101 | RED
101 | BLU
101 | TAN

然后我有一个结构相似的 MySql 表,但它有项目主表中不存在的颜色(按 SKU),我需要删除它们。
这是我目前所拥有的(注意我使用 OPENQUERY 来链接这两个表):

SELECT * FROM OPENQUERY(WEB, '
     SELECT SKU, `Filename`, Color
     FROM IP24_Import_Images
') as B
INNER JOIN sap.ItemMasterSkuColor IM
ON B.SKU = IM.Sku
WHERE B.Color NOT IN (
    SELECT Color FROM sap.Item_Master_StyleColor
    WHERE Sku ....  

我正在尝试先选择它们。然后我应该能够弄清楚如何从那里删除它们。但我最终被困在那里..
显然WHERE B.Color != IM.Color 不起作用。如果我能以某种方式从外部查询中获取有问题的 SKU,我上面的 NOT IN .. 将起作用。我怎样才能让它正常工作?谢谢!

【问题讨论】:

  • 标题具有误导性。看来您不想从表中删除。

标签: mysql sql sql-server tsql


【解决方案1】:

你为什么不做一些类似的事情

SELECT * 
FROM IP24_Import_Images B
LEFT JOIN sap.ItemMasterSkuColor IM
ON B.SKU = IM.Style AND B.Color = IM.Color
WHERE IM.Color IS NULL

应该给你来自 IM 和 B.color 的所有记录,如果它不匹配。

我希望 mySQL 具有与右连接相同的语法,因为这是 MSSQL 语法。

【讨论】:

  • 在 MSSQL 上,您可以选择 LEFT 或 RIGHT,具体取决于您要从哪个表中加入所有记录,我想在 mySQL 上也是如此。但是你说得对,这对数字或记录有逻辑问题,我切换它(编辑答案)。
  • Ofc 我也在那里修改了 WHERE 语句。
  • 做到了!非常感谢!
猜你喜欢
  • 2015-02-25
  • 1970-01-01
  • 2019-10-15
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多