#mysql #sql #subquery
#mysql #sql #подзапрос
Вопрос:
Может быть, это слишком очевидно, но я уверен, что это должен быть простой способ сделать это
SELECT 'Not Contained Yet' AS FlagRow
FROM (
SELECT 'Already Contained'
FROM MyTable t
WHERE t.id=?
AND CURDATE()=t.date
LIMIT 1
) aux
HAVING COUNT(*)=0
Это просто не возвращает результатов, если регистр уже есть в базе данных (по идентификатору, дате) и возвращает строку с сообщением «Еще не содержится», если он не существует.
Есть ли способ запросить эту особенность без использования подвыборов? Мне просто нужна одна строка с тарабарщиной, поскольку она действует как триггер для запуска моего ETL в случае, если для этого дня и идентификатора нет записей
Ответ №1:
Вы должны быть в состоянии сделать это с помощью having
:
SELECT 'Not Contained Yet' AS FlagRow
FROM MyTable t
WHERE t.id = ? and CURDATE()=t.date
HAVING COUNT(*) = 0;
Комментарии:
1. @user1352530 … Наверное, не глупый. SQL — сложный язык, и все мы время от времени пропускаем полезные вещи.
Ответ №2:
Используя count()
, вы получаете 0
, если он не содержит записи
SELECT count(*) as contains_count
FROM MyTable t
WHERE t.id = ?
AND DATE(NOW()) = t.date
Комментарии:
1. Спасибо, но мне не нужны результаты конкретно, если условия выполнены, поскольку любая строка действует как триггер для моего ETL
2. Может ли a
0
не действовать как триггер?3. Нет, потому что я выполняю следующий шаг для каждой входящей строки
Ответ №3:
SELECT CASE WHEN count(*) = 0 THEN 'Not Contained Yet' ELSE null END CASE
FROM MyTable t
WHERE t.id=?
AND CURDATE()=t.date
Комментарии:
1. К сожалению, он возвращает строку (нулевую)