मुझे लगता है कि यह आपको बता रहा है कि वास्तव में क्या गलत है। आप एक पूर्णांक की तुलना वर्चर से नहीं कर सकते। PostgreSQL सख्त है और आपके लिए कोई जादुई टाइपकास्टिंग नहीं करता है। मुझे लगता है कि SQLServer स्वचालित रूप से टाइपकास्टिंग करता है (जो एक बुरी बात है)।
यदि आप इन दो अलग-अलग जानवरों की तुलना करना चाहते हैं, तो आपको कास्टिंग सिंटैक्स का उपयोग करके एक को दूसरे में डालना होगा ::
।
इन पंक्तियों के साथ कुछ:
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 */
....;
varchar
पर ध्यान दें टेबल पर टाइपकास्टिंग1.col4.
यह भी ध्यान दें कि टाइपकास्टिंग संभवतः उस कॉलम पर आपकी अनुक्रमणिका को अनुपयोगी प्रस्तुत कर सकता है और इसमें प्रदर्शन जुर्माना है, जो बहुत खराब है। एक बेहतर समाधान यह देखना होगा कि क्या आप दो कॉलम प्रकारों में से एक को दूसरे से मिलान करने के लिए स्थायी रूप से बदल सकते हैं। सचमुच अपना डेटाबेस डिज़ाइन बदलें।
या आप कस्टम, अपरिवर्तनीय . का उपयोग करके कास्ट किए गए मानों पर एक अनुक्रमणिका बना सकते हैं फ़ंक्शन जो कॉलम पर मान डालता है। लेकिन यह भी सब-ऑप्टिमल साबित हो सकता है (लेकिन लाइव कास्टिंग से बेहतर)।