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

Cách điền khóa ngoại của một bảng từ các bảng khác

Điều này có thể được đơn giản hóa thành:

INSERT INTO translation (id, translated, language_id, template_id)
SELECT tmp.id, tmp.translated, l.id, t.id
FROM   tmp_table tmp
JOIN   language l USING (langname)
JOIN   template t USING (tplname, source, domain)
ORDER  BY tmp.id

Tôi đã thêm một ORDER BY điều khoản mà bạn không thực sự cần, nhưng một số truy vấn nhất định có thể có lợi nếu bạn chèn dữ liệu của mình được nhóm theo cách đó (hoặc một số cách khác).

Nếu bạn muốn tránh mất các hàng mà bạn không thể tìm thấy một hàng phù hợp bằng language hoặc template , hãy đặt nó thành LEFT JOIN thay vì JOIN cho cả hai bảng (miễn là language_idtemplate_id có thể là NULL .

Ngoài những gì tôi đã liệt kê trong câu hỏi tiền truyện :Nếu INSERT lớn và chiếm tỷ lệ lớn trong bảng mục tiêu, thì việc DROP tất cả các chỉ mục có thể nhanh hơn trên bảng mục tiêu và tạo lại chúng sau đó. Tạo chỉ mục từ đầu là rất nhiều nhanh hơn sau đó cập nhật chúng tăng dần cho mọi hàng.

Các chỉ mục duy nhất cũng đóng vai trò như các ràng buộc, vì vậy bạn sẽ phải cân nhắc xem có nên thực thi các quy tắc sau này hay để chúng tại chỗ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. viết bảng vào Postgresql bằng rPostgreSQL khi tên cơ sở dữ liệu là chữ in hoa

  2. ActiveRecord ::StatementInvalid:PG ::ReadOnlySqlTransaction:- Cơ sở dữ liệu Heroku vẫn chỉ đọc ngay cả sau khi hủy theo dõi

  3. Postgres:Tại sao hiệu suất quá tệ trên các lựa chọn con có Offset / Limit

  4. Duy trì múi giờ ở loại timestamptz PostgreSQL

  5. Chia sẻ kết nối với db postgres trên các quy trình bằng Python