разделение строк mysql

#mysql #sql #aggregate-functions

#mysql #sql #агрегированные функции

Вопрос:

Я использую следующие запросы и получаю разные результаты.

 SELECT SUM(amt) FROM table1 WHERE id in (114,116) and another_id = 10;

result is 10 20 = 30

SELECT SUM(amt) FROM table1 WHERE id in (REPLACE("116,114",'"',"")) and another_id = 10;

result is 10
  

мне предложили использовать функцию разделения строк и поместить разбиения в таблицу, может кто-нибудь указать мне на пример?

Ответ №1:

ВЫБЕРИТЕ СУММУ (amt) Из таблицы1, ГДЕ идентификатор в (ЗАМЕНИТЬ(«116,114″,'»‘,»»)) и another_id = 10;

Было бы полезно, если бы мы знали, что вы пытаетесь сделать.

Я предполагаю, что вы хотите предоставить средство, в котором кто-то может указать набор идентификаторов и передать это в качестве аргумента запросу.

Простым решением было бы:

 WHERE CONCAT('%,', id, ',%') LIKE ('${submitted_string}')
  

Но это не позволит использовать какой-либо индекс на table1.id

AFAIK в MySQL нет способа привести массив / строку к табличному типу, поэтому вам нужно было бы проанализировать строку и поместить значения temporaril; y в таблицу вместе с ключом, ссылающимся на сеанс (или во временную таблицу). Выполнение этого в SQL — довольно сложная работа — намного проще использовать логический уровень сверху — который, исходя из моей интерпретации того, чего вы пытаетесь достичь, у вас уже должен быть.

Ответ №2:

Судя по вашему коду, ID является числовым полем…

Попробуйте это для второго примера…

 SELECT SUM(amt) FROM table1 WHERE "," CAST(id AS CHAR) "," in ("," "116,114" ",") 
                             and another_id = 10;