PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cari di beberapa tabel dan juga tampilkan nama tabel di baris yang dihasilkan

Anda mencari SQL dinamis. Kumpulkan kueri Anda dari katalog sistem secara otomatis:

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
   );

Menghasilkan string kueri:

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'
...

Kemudian jalankan dalam panggilan kedua atau otomatisasi sepenuhnya dengan fungsi PL/pgSQL menggunakan EXECUTE . Contoh:
Pilih kumpulan kolom dinamis dari tabel dan dapatkan jumlah untuk setiap kolom

Kueri ini menghasilkan aman kode dengan pengidentifikasi bersih yang mencegah injeksi SQL. (Penjelasan untuk oid::regclass di sini.)

Ada lebih banyak jawaban terkait. Gunakan pencarian.

BTW, LIKE di student_name LIKE 'John Doe' tidak ada gunanya. Tanpa wildcard, cukup gunakan = .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyatuan Koneksi PostgreSQL dengan PgBouncer

  2. Pilih kolom dengan nama kolom tertentu di PostgreSQL

  3. kunci duplikat postgresql melanggar batasan unik

  4. mengapa PG::UniqueViolation:ERROR:nilai kunci duplikat melanggar batasan unik?

  5. Pengecualian DBConcurrency Terjadi Saat Memperbarui Menggunakan Dataadapter