У меня есть 2 таблицы customer_address_entity
entity_id | foo | bar
----------------------
1 | bla | bla
2 | bla | bla
3 | bla | bla
и customer_address_entity_varchar
value_id | attribute_id |entity_id | value
-------------------------------------------------
1 | 21 | 1 | something_1
2 | 22 | 1 | anything_1
3 | 31 | 1 | whatever_1
4 | 21 | 2 | something_2
5 | 22 | 2 | anything_2
6 | 21 | 3 | something_3
7 | 31 | 3 | whatever_3
, и я хочу выбрать все элементы в customer_address_entity
, которые не имеют никакого attribute_id= 31 значение в customer_address_entity_varchar
.
Например, customer_address_entity
entity_id = 2 имеет customer_address_entity_varchar
attribute_id значения 21 и 22, но не 31. Поэтому я хочу выбрать это.
сейчас я присоединяюсь к обеим таблицам и группирую их по entity_id
, но
SELECT cae.`entity_id`, caev.`attribute_id`, caev.`value`
FROM `customer_address_entity` AS `cae`
INNER JOIN `customer_address_entity_varchar` AS `caev`
ON cae.`entity_id`=caev.`entity_id`
GROUP BY cae.`entity_id`;
пример объединенных таблиц с GROUP_BY:
entity_id | attribute_id | value
---------------------------------------
1 | 21 | something_1
2 | 21 | something_2
3 | 21 | something_3
Я застрялздесь, поскольку я не знаю, как выбрать группу, у которой нет 31 в attribute_id.
желаемый результат:
entity_id | attribute_id | value
---------------------------------------
2 | 21 | something_2