@lolrofl01

Как найти слово сразу в трех разных таблицах в бд?

Добрый день.
В бд есть 3 таблицы: one, two, three. В каждой есть поле display_name и просто name. При получении слова, надо одним запросом найти в какой таблице и в какой колонке оно находится. Слово точное, т.е. без LIKE. Можно такое одним запросом сделать? Не хотелось бы 3 разных плодить...Взаимосвязи у таблиц между собой нет (т.е. join не подойдет).
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 5
@dimuska139
Backend developer
А через UNION пробовали?
Ответ написан
Комментировать
@Terran37
Программист
Вы можете динамически подставлять имя таблицы в поиск, но для этого вам все равно придется написать функцию или процедуру или скрипт для перебора по нескольким таблицам.
Ответ написан
Комментировать
При такой исходной постановке задачи это всегда будет три отдельных запроса. Другое дело, что их можно объединить через конструкцию sql UNION.

Вот абстрактный пример:
select
  display_name
  , 'Table one' as TableName
from
  one
where
  [display_name] = 'Искомое слово'
union all
select
  display_name
  , 'Table two' as TableName
from
  two
where
  [display_name] = 'Искомое слово'
union all
select
  display_name
  , 'Table three' as TableName
from
  three
where
  [display_name] = 'Искомое слово'

На выходе будет таблица из двух колонок с искомым словом и названием таблицы где оно было найдено.
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
SELECT * FROM
( SELECT 'one' AS TableName, 'display' AS FieldName, display_name AS Search FROM One AS O1
UNION
SELECT 'one', 'name', name  FROM One AS O2
UNION
SELECT 'two', 'display', display_name  FROM Two AS T1
UNION
SELECT 'two', 'name', name  FROM Two AS T2
UNION
SELECT 'three', 'display', display_name  FROM Three AS T3
UNION
SELECT 'three', 'name', name  FROM Three AS T4) AS TableSearch
WHERE Search = 'Word'
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
join не подойдет


еще как пойдет

в Джоин главное WHERE а не table names, Mysql хоть так хоть так делает декартово произведение перечисленных таблиц, и только where позволяет часть в каждом множестве (таблице) отбросить

ну а сама постановка задачи плоха
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы