У меня есть таблица, которая содержит 3 столбца идентификаторов, clothes
, shoes
, customers
и связывает их.
У меня есть запрос, который отлично работает:
select clothes, shoes from table where customers = 101
(вся одежда и обувь заказчика 101). Это возвращает
clothes - shoes (SET A)
1 6
1 2
33 12
24 null
Другой запрос, который отлично работает:
select clothes ,shoes from table
where customers in
(select customers from table where clothes = 1 and customers <> 101 )
(вся одежда и обувь любого другого клиента, кроме 101, с указанной одеждой). Это возвращает
shoes - clothes(SET B)
6 null
null 24
1 1
2 1
12 null
null 26
14 null
Теперь я хочу получить всю одежду и обувь из КОМПЛЕКТА А, которых нет в КОМПЛЕКТЕ В.
Итак (пример) select from SET A where NOT IN SET B
. Это должно вернуть только одежду 33, верно?
Я пытаюсь преобразовать это в рабочий запрос:
select clothes, shoes from table where customers = 101
and
(clothes,shoes) not in
(
select clothes,shoes from
table where customers in
(select customers from table where clothes = 1 and customers <> 101 )
) ;
Я пробовал разные синтаксисы, но выше выглядит больше логики.
Проблема в Я никогда не получаю одежду 33, только пустой набор.
Как мне это исправить? Что идет не так?
Спасибо
Редактировать, вот содержимое таблицы
id shoes customers clothes
1 1 1 1
2 1 4 1
3 1 5 1
4 2 2 2
5 2 3 1
6 1 3 1
44 2 101 1
46 6 101 1
49 12 101 33
51 13 102
52 101 24
59 107 51
60 107 24
62 23 108 51
63 23 108 2
93 124 25
95 6 125
98 127 25
100 3 128
103 24 131
104 25 132
105 102 28
106 10 102
107 23 133
108 4 26
109 6 4
110 4 24
111 12 4
112 14 4
116 102 48
117 102 24
118 102 25
119 102 26
120 102 29
122 134 31