MySQL: использование разделенных запятой идентификаторов в столбце таблицы и group_concat - PullRequest
1 голос
/ 03 мая 2010

В таблице есть столбец, содержащий идентификаторы, разделенные запятыми, например: "159,167"

Я хочу сделать эквивалент соединения между этой таблицей и таблицей, содержащей эти идентификаторы.

например:

TableA             TableB
id desc            id desc tableAids  stock
1  test1           1  abc  1,2,3      1
2  test2           2  def  1,2        0
3  test3           3  ghi  3,4        10
4  test4

Как я могу объединить две таблицы с помощью запроса? Я исследовал функцию group_concat (), но она возвращает строку, которую я не могу вставить в предложение IN.

Я пытаюсь сделать что-то вроде этого:

Select a.desc from TableA a
LEFT JOIN TableB b on a.id = b.tableAids
WHERE b.stock > 1

1 Ответ

1 голос
/ 04 мая 2010

У меня есть решение для вашего вопроса, , но :

  • вам следует серьезно подумать о рефакторинге, чтобы избавиться от идентификаторов, разделенных комой

  • решение делает то, что вам нужно прямо сейчас, но его нельзя оптимизировать (mysql не может использовать индексы для ускорения выполнения, см. Ниже)

Попробуйте это:

select a.desc
from TableA a
inner join TableB b on find_in_set(a.id, b.tableAids) > 0
where b.stock > 1;

Mysql не может использовать индексы для объединения таблиц, поскольку столбцы в условии объединения включены в функцию. Однако, если у вас есть индекс для столбца TableB.stock, это может немного помочь.

Помните: хранение нескольких значений в столбце - это большое НЕТ-НЕТ , и вы должны избавиться от этого как можно скорее. Это вызовет много головных болей позже.

...