PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Търсете в множество таблици и също така показвайте името на таблицата в получените редове

Вие търсите динамичен SQL. Автоматично сглобете заявката си от системния каталог:

SELECT string_agg('SELECT student_name, '''
                   || c.oid::regclass || ''' AS tbl, pid FROM '
                   || c.oid::regclass
                   || $$ WHERE student_name = 'John Doe'$$
                 , E'\nUNION ALL\n')
FROM   pg_namespace n
JOIN   pg_class     c ON c.relnamespace = n.oid
WHERE  n.nspname = 'public'         -- schema name where your tables lie
AND    c.relname LIKE 't%'          -- and / or filter table names
AND    EXISTS (
   SELECT 1 FROM pg_attribute 
   WHERE  attrelid = c.oid
   AND    attname = 'student_name'  -- make sure column exists
   AND    NOT attisdropped          -- and is alive
   );

Създава низа на заявката:

SELECT student_name, 'tbl1' AS tbl, pid FROM tbl1 WHERE student_name = 'John Doe'
UNION ALL
SELECT student_name, 'tbl2' AS tbl, pid FROM tbl2 WHERE student_name = 'John Doe'
UNION ALL
SELECT student_name, 'tbl3' AS tbl, pid FROM tbl3 WHERE student_name = 'John Doe'
...

След това го стартирайте при второ повикване или го автоматизирайте напълно с функция PL/pgSQL, като използвате EXECUTE . Пример:
Изберете динамичен набор от колони от таблица и получете сумата за всяка

Тази заявка създава безопасен код с дезинфекцирани идентификатори, предотвратяващи SQL инжектиране. (Обяснение за oid::regclass тук.)

Има още свързани отговори. Използвайте търсене.

BTW, LIKE в student_name LIKE 'John Doe' е безсмислено. Без заместващи знаци, просто използвайте = .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT с име на динамична таблица в тригерна функция

  2. Обърнете се към псевдоним на име на колона в клаузата WHERE

  3. PostgreSQL наследяване с JPA, хибернация

  4. Postgres сървърът не отговаря на заявка за nodejs

  5. Как да превключите база данни с помощта на PostgreSQL