powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Разделить значение через запятую
14 сообщений из 14, страница 1 из 1
Разделить значение через запятую
    #39883988
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле Х в таблице А. В нем хранятся ID таблицы B через запятую, т.е. '502000326,502000117'.
Подскажите как их JOINить?
Потому что так:
Код: plsql
1.
2.
3.
4.
select A.X, B.NAME
from A
left join B on B.ID in (A.X)
where A.ID=:ID


естественно не работает.
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39883994
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4,

Написать свою сплит-SP и с ней уже джойнить B.
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39883996
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4,

1. Сделать нормализацию БД и разделить X на два поля
2. Написать ХП (можно и внешнюю UDR) SPLIT которая бы разделяла X на два значения
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884012
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
реализовано так :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create or alter procedure GETLIST
(
  STR TTEXT4096
)
returns
(
  ID TICODE
)
as
declare i ticode;
declare val ttext1024;
begin
  if (coalesce(str, '') = '') then
    exit;

  i = 1;
  while (i <= char_length(str) + 1) do
  begin
    if ((substring(str from i for 1) = ',') or (i = char_length(str) + 1)) then
    begin
      val = substring(str from 1 for i - 1);
      if (val > '') then
      begin
        id = cast(val as integer);
        suspend;
      end
      str = substring(str from i + 1);
      i = 1;
    end
    i = i + 1;
  end
end
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884146
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис1. Сделать нормализацию БД и разделить X на два поляНе учи дурному. Сегодня 2 поля, завтра 3, потом 5 и ... дальше продолжать? Делать так по науке, через стыковочную таблицу и джойнить станет рутиной, а не выкрутасом с доворотом.
koo3mee4реализовано такГ****.
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884190
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

чёто мне вначале почудилось что он координаты там хранит. Сейчас перечитал и понял, да фигню сморозил
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884196
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884200
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4Подскажите как их JOINить?если "буквально", то так
Код: sql
1.
2.
3.
...
from A
left join B on ','||A.X||',' like '%,'||B.ID||',%'
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884322
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtkoo3mee4Подскажите как их JOINить?если "буквально", то так
Код: sql
1.
2.
3.
...
from A
left join B on ','||A.X||',' like '%,'||B.ID||',%'

Еще один пример кода, за который в продакшене надо "линейкой по пальцам".
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884584
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskycourtпропущено...
если "буквально", то так
Код: sql
1.
2.
3.
...
from A
left join B on ','||A.X||',' like '%,'||B.ID||',%'


Еще один пример кода, за который в продакшене надо "линейкой по пальцам"./*cutted*/

А так-то, приходится уже иметь дело с тем что есть.
И, в таком случае, вариант с like ничем не хуже, чем "самопальный" split
За исключением того, что писать-то этот split - не нужно
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884616
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtIvan_Pisarevskyпропущено...
Еще один пример кода, за который в продакшене надо "линейкой по пальцам".За "линейку" (автору ниже - "за яйца") нужно было хвататься когда "архитектор" проектировал такое поле, "уложив" болт на 1НФ :)

А так-то, приходится уже иметь дело с тем что есть.
И, в таком случае, вариант с like ничем не хуже, чем "самопальный" split
За исключением того, что писать-то этот split - не нужно
Думаю что, в случае ТСа все-же предпочтительней split
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884632
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

/*cutted*/
... а во вторых упомянутый сплит, давно имеющийся у каждого мало мальски опытного разработчика, пригодится не только для нормализации денормализованного, а ещё и для много чего по настоящему полезного.
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39884661
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtА так-то, приходится уже иметь дело с тем что есть.То, "что есть" вполне расшивается апдетебл вьхой, на первых порах и постепенно переписывается на "как надо".
...
Рейтинг: 0 / 0
Разделить значение через запятую
    #39885227
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Давайте остановимся на "линейкой по пальцам", во избежание.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Разделить значение через запятую
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]