MySQL Выбрать, Где Не В.Как указать несколько полей - PullRequest
0 голосов
/ 01 апреля 2019

Я использую следующий запрос в минуту

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

Это возвращает мне SKU и страну из моей таблицы Products, если SKU не найден в таблице ProductData.

То, чего я добиваюсь в следующий раз, - это тот же результат, но когда SKU и Страна не указаны в строке в ProductData.

В следующем примере MySKU1 отсутствует в таблице ProductData для Франции и Германии, но мой текущий запрос не вернет их, так как 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

Я полагаю, что могу сделать это и с помощью объединения, но я не до конца понимаю синтаксис, поэтому любая помощь будет принята.

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

Вы можете сделать это с ЛЕВЫМ соединением:

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 голос
/ 01 апреля 2019

Вы можете добавить столбец Country к выражению IN:

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

Вывод:

SKU     Country
MySKU1  France
MySKU1  Germany

Демонстрация на dbfiddle

0 голосов
/ 01 апреля 2019

Может быть, что-то подобное?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...