Проверка Mysql, если столбец имеет значения на основе другого столбца

0

Я использую PDO для обработки моей базы данных, и у меня есть одна таблица:

Table:
id    sku    category
1     XYZ    Ballerinas
2            Ballerinas
3            Ballerinas
4     ABC    Ballerinas

Как вы можете видеть, у меня есть 4 ряда, которые находятся в одной и той же категории Ballerinas но у двух из них нет sku. Как я могу вернуть эти строки, используя запрос pdo, только если все Ballerinas имеют sku?

Спасибо! : D

  • 0
    эти строки имеют null значение или пустое значение? какое значение по умолчанию для этого столбца?
  • 0
    эти столбцы имеют пустую строку sku = ''
Показать ещё 1 комментарий
Теги:
pdo

2 ответа

3
Лучший ответ

Один из вариантов поиска совпадающих категорий - агрегировать по категориям, а затем утверждать, что общий счетчик соответствует количеству значений sku которые не являются пустой строкой. Если эти два счета совпадают, сохраните эту категорию.

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT category
    FROM yourTable
    GROUP BY category
    HAVING COUNT(*) = COUNT(CASE WHEN sku <> '' THEN 1 END)
) t2
    ON t1.category = t2.category;

демонстрация

  • 0
    Привет @TimBiegeleisen, это perfeeeecttttt, он делает именно то, что мне нужно! : D Спасибо, тыуууууу! : D <3
  • 0
    @emma Если этот ответ решил вашу проблему, вы можете пометить его правильно, нажав зеленую галочку. Ответ @ cars10m - это другой подход, использующий предложение EXISTS . Либо должно быть хорошо для вас.
Показать ещё 1 комментарий
2

Или вы можете сделать это без участия:

SELECT *
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1 FROM Table1 t2 WHERE t1.category = t2.category AND t2.sku IS NULL);

Если вы считаете пустые значения ('') также "не являющимися значением", тогда условие в условии exists должно быть

where t2.category=t1.category and not t2.SKU>''
  • 0
    В списке столбцов внешнего запроса вам не нужно указывать псевдоним таблицы ( t1. ), Поскольку для вывода доступна только одна таблица.
  • 0
    Спасибо @ cars10m, я уже использовал ответ Тима, но этот тоже работает: D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню