PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

loại trừ các trường trùng lặp trong một phép nối

Không có cú pháp loại trừ cột trong SQL, chỉ có cú pháp bao gồm cột (thông qua toán tử * cho tất cả các cột hoặc liệt kê tên cột một cách rõ ràng).

Tạo danh sách chỉ các cột bạn muốn

Tuy nhiên, bạn có thể tạo câu lệnh SQL với hàng trăm tên cột của nó, trừ đi một số cột trùng lặp mà bạn không muốn, bằng cách sử dụng bảng lược đồ và một số hàm tích hợp trong cơ sở dữ liệu của bạn.

SELECT
    'SELECT sampledata.c1, sampledata.c2, ' || ARRAY_TO_STRING(ARRAY(
        SELECT 'demographics' || '.' || column_name
        FROM information_schema.columns
        WHERE table_name = 'demographics' 
        AND column_name NOT IN ('zip')
        UNION ALL
        SELECT 'community' || '.' || column_name
        FROM information_schema.columns
        WHERE table_name = 'community' 
        AND column_name NOT IN ('fips')
    ), ',') || ' FROM sampledata JOIN demographics USING (zip) JOIN community USING (fips)'
AS statement

Điều này chỉ in ra câu lệnh, nó không thực thi nó. Sau đó, bạn chỉ cần sao chép kết quả và chạy nó.

Nếu bạn muốn vừa tạo và chạy câu lệnh động trong một lần, thì bạn có thể đọc thêm cách chạy SQL động trong Tài liệu PostgreSQL .

Thêm tên cột với tên bảng

Ngoài ra, điều này sẽ tạo ra một danh sách chọn lọc của tất cả các cột, bao gồm cả những cột có dữ liệu trùng lặp, nhưng sau đó đặt bí danh cho chúng để bao gồm cả tên bảng của mỗi cột.

SELECT
    'SELECT ' || ARRAY_TO_STRING(ARRAY(
        SELECT table_name || '.' || column_name || ' AS ' || table_name || '_' || column_name
        FROM information_schema.columns
        WHERE table_name in ('sampledata', 'demographics', 'community')
    ), ',') || ' FROM sampledata JOIN demographics USING (zip) JOIN community USING (fips)'
AS statement

Một lần nữa, điều này chỉ tạo ra câu lệnh. Nếu bạn muốn vừa tạo và chạy câu lệnh động, thì bạn sẽ cần phải hoàn thiện việc thực thi SQL động cho cơ sở dữ liệu của mình, nếu không chỉ cần sao chép và chạy kết quả.

Nếu bạn thực sự muốn có dấu phân tách dấu chấm trong bí danh cột, thì bạn sẽ phải sử dụng các bí danh được trích dẫn kép chẳng hạn như SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"' . Tuy nhiên, các bí danh được trích dẫn kép có thể gây ra thêm các biến chứng (phân biệt chữ hoa chữ thường, v.v.); vì vậy, tôi đã sử dụng ký tự gạch dưới thay thế để tách tên bảng khỏi tên cột trong bí danh và các bí danh sau đó có thể được coi như tên cột thông thường khác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lưu trữ các chuỗi có độ dài tùy ý trong Postgresql

  2. Cách Asind () hoạt động trong PostgreSQL

  3. Rails không khôi phục giao dịch sau khi lưu không thành công ()

  4. Cung cấp một câu lệnh đã chuẩn bị sẵn với một mảng

  5. Tìm ra số tháng giữa 2 ngày