MySQL选择不在的地方。如何指定多个字段

问题描述 投票:0回答:3

我现在使用以下查询

SELECT SKU, Country FROM Products WHERE SKU NOT IN (SELECT SKU FROM ProductData)

只要在ProductData表中找不到SKU,这就会从Products表中返回SKU和Country。

我正在努力实现的目标是相同的结果,但是在ProductData的行中找不到SKU和Country。

在以下示例中,法国和德国的ProductData表中缺少MySKU1,但由于MySKU1存在,我当前的查询不会返回它们。所以我需要以某种方式添加第二个字段。

Products TABLE
--------------
MySKU1 UK
MySKU1 France
MySKU1 Germany
MySKU2 UK
MySKU2 France
MySKU2 Germany


ProductData TABLE
--------------
MySKU1 UK
MySKU2 UK
MySKU2 France
MySKU2 Germany

我相信我也可以通过加入来做到这一点,但我不完全理解语法,所以任何帮助都会受到赞赏。

mysql join
3个回答
1
投票

您可以将Country列添加到IN表达式:

SELECT SKU, Country 
FROM Products 
WHERE (SKU, Country) NOT IN (SELECT SKU, Country FROM ProductData)

输出:

SKU     Country
MySKU1  France
MySKU1  Germany

Demo on dbfiddle


1
投票

您可以使用LEFT联接来执行此操作:

SELECT p.SKU, p.Country 
FROM Products p LEFT JOIN ProductData d
on d.SKU = p.SKU and d.Country = p.Country
WHERE d.SKU is null or d.Country is null

结果:

| SKU    | Country |
| ------ | ------- |
| MySKU1 | France  |
| MySKU1 | Germany |

-1
投票

也许是这样的?

SELECT p.SKU, p.Country 
FROM Products p
Left outer join ProductData pd on pd.SKU = p.SKU and pd.COUNTRY = p.COUNTRY
WHERE pd.SKU is null
© www.soinside.com 2019 - 2024. All rights reserved.