Запрос для выбора всех элементов, не имеющих определенного поля

Timmy спросил: 28 марта 2018 в 02:23 в: mysql

В первую очередь я использую mysql 5.6

Я хочу выбрать все элементы, удовлетворяющие хотя бы одному из этих запросов:

  1. Do not имеют определенное поле.
  2. В определенном поле есть пустое значение (для пустого я имею в виду: len(trim(value)) == 0)

Я сделаю пример более ясный

table2
id|field|value
1 |x    |12
1 |y    |23
1 |z    |34
2 |x    |45
2 |y    |56
2 |z    |  <---- is an empty string with 0/1 spaces
3 |x    |67

Так что я хочу, например, если я хочу, чтобы все поля, у которых не было поля z, я должен был получить (2,3) В случае всех полей без y я должен получить (3)

Это то, что я пробовал без особого успеха:

SELECT t12.id 
FROM table2 AS t12
WHERE NOT IN ( 
    SELECT t2.id 
    FROM table2 as t2
    WHERE t2.field = 'y' 
        AND t2.value <> '' AND t2.value IS NOT NULL
)

1 ответ

shawnt00 ответил: 28 марта 2018 в 02:53
select id from t group by id
having min(len(value)) = 0 or count(case when field = 'x' then 1 end) = 0

Объедините несколько условий в case, если критерии должны соответствовать одной строке, а не всей группе.