Я получаю ошибку целого числа, но не понимаю почему.
Предупреждение: # 1292 Усеченное неверное значение INTEGER: '% accept%';
Предупреждение: # 1292 Усеченное неверное значение INTEGER: "% pending%".
Ошибка обработки отсутствует. Неважно, что находится в «1-й позиции», ошибки нет.
Может кто-нибудь помочь?
SELECT a.`post_id`, b.`name`,
MAX(case when meta_key = 'value' THEN `meta_value` ELSE NULL END) as 'Email',
FROM table_1 a
INNER JOIN table_2 b
ON FIND_IN_SET(a.post_id, b.payment_ids)
GROUP BY a.post_id
HAVING OrderStatus LIKE '%processing%' OR '%pending%' OR '%accepted%' AND DeliveryDate >= (DATE_SUB(CURDATE(), INTERVAL 7 DAY)) AND DeliveryType = 'pickup'
2 ответа
SELECT a.`post_id`, b.`name`,
MAX(case when meta_key = 'value' THEN `meta_value` ELSE NULL END) as 'Email',
FROM table_1 a
INNER JOIN table_2 b
ON FIND_IN_SET(a.post_id, b.payment_ids)
GROUP BY a.post_id
HAVING OrderStatus LIKE '%processing%' OR OrderStatus LIKE '%pending%' OR OrderStatus LIKE '%accepted%' AND DeliveryDate >= (DATE_SUB(CURDATE(), INTERVAL 7 DAY)) AND DeliveryType = 'pickup'
OrderStatus LIKE '%processing%' OR '%pending%' OR '%accepted%'
Это не то, что вы думаете. MySQL понимает это как:
(OrderStatus LIKE '%processing%')
OR ('%pending%')
OR ('%accepted%')
Поэтому он пытается оценить строки в логическом контексте, что выдает предупреждение, которое вы получаете.
Вам нужно повторить выражение like
для каждой совпадающей строки:
(
OrderStatus LIKE '%processing%'
OR OrderStatus LIKE '%pending%'
OR OrderStatus LIKE '%accepted%'
)
Или вы можете использовать регулярное выражение:
OrderStatus RLIKE 'processing|pending|accepted'
Обратите внимание, что эти условия должны принадлежать предложению where
, а не предложению having
, поскольку они относятся к неагрегированным столбцам. Я бы сформулировал запрос так:
select
t1.post_id,
t2.name,
-- no need for an "else" branch here
max(case when meta_key = 'value' then meta_value end) as email
from table_1 t1
inner join table_2 t2 on find_in_set(t1.post_id, t2.payment_ids)
where
-- filtering in the "where" clause
OrderStatus rlike 'processing|pending|accepted' -- regex
and DeliveryDate >= current_date - interval 7 day -- no need for "datesub()"
and DeliveryType = 'pickup'
group by
-- all non-aggregated column in the `group by` clause
t1.post_id,
t2.name
Обратите внимание, что перед всеми столбцами в запросе следует указывать таблицу, к которой они принадлежат, чтобы код был однозначным и не требующим пояснений.
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.