Bạn đang tìm kiếm SQL động. Tự động tập hợp truy vấn của bạn từ danh mục hệ thống:
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
);
Tạo chuỗi truy vấn:
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'
...
Sau đó, chạy nó trong cuộc gọi thứ hai hoặc hoàn toàn tự động hóa nó bằng hàm PL / pgSQL bằng cách sử dụng EXECUTE
. Ví dụ:
Chọn một tập hợp các cột động từ một bảng và lấy tổng cho mỗi cột
Truy vấn này tạo ra an toàn mã có số nhận dạng được khử trùng ngăn chặn việc đưa vào SQL. (Giải thích cho oid::regclass
tại đây.)
Có nhiều câu trả lời liên quan hơn. Sử dụng tìm kiếm.
BTW, LIKE
trong student_name LIKE 'John Doe'
là vô nghĩa. Không có ký tự đại diện, chỉ cần sử dụng =
.