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

PostgreSQL:LỖI:không tồn tại toán tử:số nguyên =ký tự thay đổi

Tôi nghĩ rằng nó đang cho bạn biết chính xác những gì là sai. Bạn không thể so sánh một số nguyên với một varchar. PostgreSQL nghiêm ngặt và không thực hiện bất kỳ thao tác đánh máy kỳ diệu nào cho bạn. Tôi đoán SQLServer thực hiện đánh máy tự động (đó là một điều tồi tệ).

Nếu bạn muốn so sánh hai con thú khác nhau này, bạn sẽ phải truyền con này sang con kia bằng cú pháp ép kiểu :: .

Điều gì đó dọc theo những dòng này:

create view view1
as 
select table1.col1,table2.col1,table3.col3
from table1 
inner join
table2 
inner join 
table3
on 
table1.col4::varchar = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;

Lưu ý varchar đánh máy trên table1.col4.

Cũng lưu ý rằng việc đánh máy có thể khiến chỉ mục của bạn trên cột đó không thể sử dụng được và có một hình phạt về hiệu suất, điều này khá tệ. Một giải pháp thậm chí còn tốt hơn là xem liệu bạn có thể thay đổi vĩnh viễn một trong hai loại cột để phù hợp với loại cột kia hay không. Thay đổi rõ ràng thiết kế cơ sở dữ liệu của bạn.

Hoặc bạn có thể tạo chỉ mục trên các giá trị được truyền bằng cách sử dụng tùy chỉnh, không thể thay đổi hàm truyền các giá trị trên cột. Nhưng điều này cũng có thể chứng minh là không tối ưu (nhưng tốt hơn truyền trực tiếp).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm cửa sổ PostgreSQL:row_number () over (thứ tự col phân vùng theo col2)

  2. eclipselink jpa tạo số lượng truy vấn bằng cách sử dụng COUNT (id) thay vì COUNT (*)

  3. Không thể kết nối với PostgreSQL cục bộ

  4. Truy vấn postgresql LIKE

  5. Kiểm tra xem cơ sở dữ liệu có tồn tại trong PostgreSQL hay không bằng cách sử dụng shell