powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос из трех таблиц
10 сообщений из 10, страница 1 из 1
Запрос из трех таблиц
    #38848087
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день уважаемые форумчане.
Всех с прошедшим Новым годом и наступающим Рождеством.

Объясню картину
Имеются три таблицы.
t1, t2, t3
Главная считается t1 (id, info, t2id, t3id)
Второй t2 (id, info, t3id)
Третьей t3 (id,info)
В t1 - t3id есть у всех записей, а t2id - у большинства(75%)(!!!самая большая загвоздка)
выбрать необходимо следующую последовательность
t1.id, t3.info, t2.info, t1.info, при этом есть вводные данные -конкатенация t3.info, t2.info, t1.info
сейчас выборка выглядит так:
SELECT t1.id,
t3.info,
t2.info,
t1.info
FROM t1
INNER JOIN t3 ON t3.id = t1.t3id
INNER JOIN t2 ON t2.id = t1.t2id
WHERE (concat(t3.info,' ', t2.info,' ', t1.info)) ILIKE ('%'||(REPLACE('текстовое наполнение полей',' ','%'))||'%')

теперь по-русски,
не получается написать запрос при котором будет одинаково работать следующая система поиска по полям
t3.info,t2.info,t1.info
t3.info, t1.info (так как не у всех записей есть информация из t2)
Так же есть в t2 нулевая строка, нулевую информацию из которой берет запрос(на эту строку ссылаются все строки из t1 в которых нет id второй таблицы)
в этом ключе и действовать, вложенными запросами не очень хочется решить эту проблемы.
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848088
поправил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TrippalДобрый день уважаемые форумчане.
Всех с прошедшим Новым годом и наступающим Рождеством.

Объясню картину
Имеются три таблицы.
t1, t2, t3
Главная считается t1 (id, info, t2id, t3id)
Второй t2 (id, info, t3id)
Третьей t3 (id,info)
В t1 - t3id есть у всех записей, а t2id - у большинства(75%)(!!!самая большая загвоздка)
выбрать необходимо следующую последовательность
t1.id, t3.info, t2.info, t1.info, при этом есть вводные данные -конкатенация t3.info, t2.info, t1.info
сейчас выборка выглядит так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.id,
t3.info,
t2.info, 
t1.info 
FROM t1
LEFT JOIN t3 ON t3.id = t1.t3id
LEFT JOIN t2 ON t2.id = t1.t2id 
WHERE (concat(t3.info,' ', t2.info,' ', t1.info)) ILIKE ('%'||(REPLACE('текстовое наполнение полей',' ','%'))||'%') 


теперь по-русски,
не получается написать запрос при котором будет одинаково работать следующая система поиска по полям
t3.info,t2.info,t1.info
t3.info, t1.info (так как не у всех записей есть информация из t2)
Так же есть в t2 нулевая строка, нулевую информацию из которой берет запрос(на эту строку ссылаются все строки из t1 в которых нет id второй таблицы)
в этом ключе и действовать, вложенными запросами не очень хочется решить эту проблемы.

помедленнееее, пэжаллст, я зэписссываю
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848095
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправилпомедленнееее, пэжаллст, я зэписссываю
А что именно? :)
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848100
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trippal,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.id,
t3.info,
t2.info,
t1.info
FROM t1
INNER JOIN t3 ON t3.id = t1.t3id
LEFT JOIN t2 ON t2.id = t1.t2id
WHERE (concat(t3.info,' ', coalesce(t2.info,''),' ', t1.info)) ILIKE ('%'||(REPLACE('текстовое наполнение полей',' ','%'))||'%')



по логике то что вы хотите

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848103
поправил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukTrippal,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.id,
t3.info,
t2.info,
t1.info
FROM t1
INNER JOIN t3 ON t3.id = t1.t3id
LEFT JOIN t2 ON t2.id = t1.t2id
WHERE (concat(t3.info,' ', coalesce(t2.info,''),' ', t1.info)) ILIKE ('%'||(REPLACE('текстовое наполнение полей',' ','%'))||'%')



по логике то что вы хотите

--Maxim Boguk
www.postgresql-consulting.ru
макс, конкат , вотличь от такого же оператора, игнорабит нуллы, т.ч. вы зря коалестите внутре оного

2 ТС ты куй,
куй, говорю, оно и выкуется
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848104
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

по логике:
есть три таблицы дома, улицы, деревни
в таблице домов есть id дома, геометрия дома, id деревень (из таблицы деревень) и id улиц (из таблицы улиц), но не во всех домах есть id улиц, так как улиц в деревне просто нет,
мне нужно найти геометрию дома и составной адрес по определенной форме id дома, название деревни, название улицы, номер дома, геометрия дома
адрес разнесен в эти три таблицы
то есть мы вводим Иваново Центральная 1 - получаем таблицу новую
или Петрово 2
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848105
поправил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправилMaxim BogukTrippal,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.id,
t3.info,
t2.info,
t1.info
FROM t1
INNER JOIN t3 ON t3.id = t1.t3id
LEFT JOIN t2 ON t2.id = t1.t2id
WHERE (concat(t3.info,' ', coalesce(t2.info||' ',''), t1.info)) ILIKE ('%'||(REPLACE('текстовое наполнение полей',' ','%'))||'%')



по логике то что вы хотите

--Maxim Boguk
www.postgresql-consulting.ru
макс, конкат , вотличь от такого же оператора, игнорабит нуллы, т.ч. вы зря коалестите внутре оного

2 ТС ты куй,
куй, говорю, оно и выкуется
хотя макс возможно вот так хотел сказать
шар хрустальный жеж
мутный
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848109
поправил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TrippalMaxim Boguk,

по логике:
есть три таблицы дома, улицы, деревни
в таблице домов есть id дома, геометрия дома, id деревень (из таблицы деревень) и id улиц (из таблицы улиц), но не во всех домах есть id улиц, так как улиц в деревне просто нет,
мне нужно найти геометрию дома и составной адрес по определенной форме id дома, название деревни, название улицы, номер дома, геометрия дома
адрес разнесен в эти три таблицы
то есть мы вводим Иваново Центральная 1 - получаем таблицу новую
или Петрово 2для поиска дешевле разложить регекспом на элементы, вычислить количество (а тем самым - и назначение элемента).

но при составных названиях будет сбоить.
типа "малые пердюки 2" -- малые -- деревня, пердюки -- улицца
ну а всякие верхненижние подзалупинки со страшего генарал атамана кривожопова улицей -- вообще празднк души и т.п.
тут уж о скорости сложно, тут в ваши конкаты от нездоровья и подашься
хотя я бы регекспанул с вариативностью -- битмапом-ором несколько вариаций обсчитать -- это не сексканы полные сконкатенатить
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848115
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправил,
совсем сложный вариант.
...
Рейтинг: 0 / 0
Запрос из трех таблиц
    #38848120
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТЕМА ЗАКРЫТА, СДЕЛАЛ САМ)
всем спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос из трех таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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