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

Ссылка скопирована
1 ответ

Есть файл SQLITE3 base.db

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

Содержит много таблиц.
В каждой таблице есть имя колонки referer, нужно сделать поиск по всем таблицам данных из колонки referer, например слово содержащее yandex из колонки referer

Дополнительно:

Лучше не плодить таблицы, а писать всё в одну. Тогда и вопросов таких возникать не будет

  • Роман Юрьевич Ипатьев, я не разработчик
  • Генерируем запрос по всем таблицам:

    SELECT      GROUP_CONCAT('select "' || name || '" table_name, * from `' || name || '` where referer = "yandex"', ' union ') q FROM      sqlite_master  WHERE      type ='table' AND      name NOT LIKE 'sqlite_%';

    SELECT GROUP_CONCAT('select "' || name || '" table_name, * from `' || name || '` where referer = "yandex"', ' union ') q FROM sqlite_master WHERE type ='table' AND name NOT LIKE 'sqlite_%';

    Получаем:

    select "t1" table_name, * from t1 where referer = "yandex" union select "t2" table_name, * from t2 where referer = "yandex"

    select "t1" table_name, * from t1 where referer = "yandex" union select "t2" table_name, * from t2 where referer = "yandex"

    Выполняем:

    +============+====+=========+ | table_name | id | referer | +============+====+=========+ | t1         | 2  | yandex  | +------------+----+---------+ | t2         | 20 | yandex  | +------------+----+---------+

    +============+====+=========+ | table_name | id | referer | +============+====+=========+ | t1 | 2 | yandex | +------------+----+---------+ | t2 | 20 | yandex | +------------+----+---------+

    SQLite fiddle

    • Спасибо за развернутый ответ по шагам. Запрос по всем таблицам сгенерировал. Ответ получил
      select "1628974800" table_name, * from 1628974800 where referer = "yandex" union select "1629061200" table_name, * from 1629061200 where referer = "yandex" union select "1629147600" table_name, * from 1629147600 where referer = "yandex" union select "1629234000" table_name, * from 1629234000 where referer = "yandex" union select "1629320400" table_name, * from 1629320400 where referer = "yandex" union select "1629406800" table_name, * from 1629406800 where referer = "yandex" union select "1629493200" table_name, * from 1629493200 where referer = "yandex" union select "1629579600" table_name, * from 1629579600 where referer = "yandex" union select "1629666000" table_name, * from 1629666000 where referer = "yandex" union select "1629752400" table_name, * from 1629752400 where referer = "yandex" union select "1629838800" table_name, * from 1629838800 where referer = "yandex" union select "1629925200" table_name, * from 1629925200 where referer = "yandex" union select "1630011600" table_name, * from 1630011600 where referer = "yandex" union select "1630098000" table_name, * from 1630098000 where referer = "yandex" union select "1630184400" table_name, * from 1630184400 where referer = "yandex" union select "1630270800" table_name, * from 1630270800 where referer = "yandex" union select "1630357200" table_name, * from 1630357200 where referer = "yandex" union select "1630443600" table_name, * from 1630443600 where referer = "yandex" union select "1630530000" table_name, * from 1630530000 where referer = "yandex" union select "1630616400" table_name, * from 1630616400 where referer = "yandex" union select "1630702800" table_name, * from 1630702800 where referer = "yandex" union select "1630789200" table_name, * from 1630789200 where referer = "yandex" union select "1630875600" table_name, * from 1630875600 where referer = "yandex" union select "1630962000" table_name, * from 1630962000 where referer = "yandex" union select "1631048400" table_name, * from 1631048400 where referer = "yandex" union select "1631134800" table_name, * from 1631134800 where referer = "yandex" union select "1631221200" table_name, * from 1631221200 where referer = "yandex" union select "1631307600" table_name, * from 1631307600 where referer = "yandex" union select "1631394000" table_name, * from 1631394000 where referer = "yandex" union select "1631480400" table_name, * from 1631480400 where referer = "yandex" union select "1631566800" table_name, * from 1631566800 where referer = "yandex"

      select "1628974800" table_name, * from 1628974800 where referer = "yandex" union select "1629061200" table_name, * from 1629061200 where referer = "yandex" union select "1629147600" table_name, * from 1629147600 where referer = "yandex" union select "1629234000" table_name, * from 1629234000 where referer = "yandex" union select "1629320400" table_name, * from 1629320400 where referer = "yandex" union select "1629406800" table_name, * from 1629406800 where referer = "yandex" union select "1629493200" table_name, * from 1629493200 where referer = "yandex" union select "1629579600" table_name, * from 1629579600 where referer = "yandex" union select "1629666000" table_name, * from 1629666000 where referer = "yandex" union select "1629752400" table_name, * from 1629752400 where referer = "yandex" union select "1629838800" table_name, * from 1629838800 where referer = "yandex" union select "1629925200" table_name, * from 1629925200 where referer = "yandex" union select "1630011600" table_name, * from 1630011600 where referer = "yandex" union select "1630098000" table_name, * from 1630098000 where referer = "yandex" union select "1630184400" table_name, * from 1630184400 where referer = "yandex" union select "1630270800" table_name, * from 1630270800 where referer = "yandex" union select "1630357200" table_name, * from 1630357200 where referer = "yandex" union select "1630443600" table_name, * from 1630443600 where referer = "yandex" union select "1630530000" table_name, * from 1630530000 where referer = "yandex" union select "1630616400" table_name, * from 1630616400 where referer = "yandex" union select "1630702800" table_name, * from 1630702800 where referer = "yandex" union select "1630789200" table_name, * from 1630789200 where referer = "yandex" union select "1630875600" table_name, * from 1630875600 where referer = "yandex" union select "1630962000" table_name, * from 1630962000 where referer = "yandex" union select "1631048400" table_name, * from 1631048400 where referer = "yandex" union select "1631134800" table_name, * from 1631134800 where referer = "yandex" union select "1631221200" table_name, * from 1631221200 where referer = "yandex" union select "1631307600" table_name, * from 1631307600 where referer = "yandex" union select "1631394000" table_name, * from 1631394000 where referer = "yandex" union select "1631480400" table_name, * from 1631480400 where referer = "yandex" union select "1631566800" table_name, * from 1631566800 where referer = "yandex"

      Потом выполняю

      Ошибка
      Execution finished with errors.
      Result: near "1628974800": syntax error
      At line 1:
      select "1628974800" table_name, * from 1628974800

    • Pista, Из-за того что имя таблицы начинается с цифры - добавьте апострофы
      select "1628974800" table_name, * from `1628974800` where referer = "yandex"

      select "1628974800" table_name, * from `1628974800` where referer = "yandex"

    • Pista, Поправил ответ
    • Slava Rozhnev, Спасибо, Слава! Вы настоящий специалист.) Ваши сервисы добавил в закладки для обучения.
      Сейчас отработало без ошибок. Еще мелкий момент, там Где where referer = "yandex" как составить запрос без явного вхождения слова yandex, мне нужно чтобы нашлось и https://yandex.ru/ и yandex.ru и другие вариации, т.е нужно найти все с вхождением слова yandex
    • Pista, referer like "%yandex%"

      https://sqlize.online/?phpses=&sqlses=e1c56416d9f3...

    • Slava Rozhnev, Очень круто.
      Последний вопрос.
      В результате можно отображать только колонку referer?

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

    • Pista, https://sqlize.online/?phpses=&sqlses=2fb7e0cedc33...

    Ответы:

    Через SHOW TABLES получаете список всех таблиц и по очереди делаете поиск в каждой или формируете запрос с UNION.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Артём Dev Ответ

    Для того чтобы получить данные по всем таблицам из определенной колонки, вам необходимо использовать соответствующий SQL-запрос. Ниже приведен пример запроса для базы данных MySQL:

    SELECT column_name
    FROM information_schema.columns
    WHERE table_schema = 'database_name'
    AND table_name = 'table_name';

    SELECT column_name FROM information_schema.columns WHERE table_schema = 'database_name' AND table_name = 'table_name';

    В данном запросе вы указываете название базы данных ('database_name') и таблицы ('table_name'), а также название колонки, данные которой вы хотите получить. Этот запрос вернет вам список всех значений из указанной колонки для указанной таблицы.

    Если вы хотите получить данные из всех таблиц в базе данных, вы можете использовать следующий запрос:

    SELECT table_name, column_name
    FROM information_schema.columns
    WHERE table_schema = 'database_name'
    AND column_name = 'column_name';

    SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'database_name' AND column_name = 'column_name';

    Этот запрос вернет вам список таблиц и колонок, в которых содержится указанное название колонки.

    Помните, что для выполнения таких запросов вам может потребоваться соответствующие разрешения на доступ к базе данных. Надеюсь, это поможет вам решить вашу проблему!

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно