31

क्या मैं चेक बाधा में SQL उप प्रश्न बना सकता हूं?चेक बाधा में SQL उप प्रश्न

मैंने कॉलम के साथ एक post तालिका id, owner
मैंने कॉलम के साथ एक और तालिका actionuser_id, post_id
टेबल user कॉलम id

post_id -> post.id और user_id -> user.id भी post.owner -> user.id

अब मैं post(post_id).id != user_id में रोके करना चाहते हैं के साथ तालिका action

पर

यह कैसे संभव है?

+0

यह क्यों बात करना चाहिए अगर एक कॉलम एक तालिका का संदर्भ देता है एक * मूल्य * कि एक और तालिका में मौजूद है के लिए होता है? आप जिस समस्या को हल करने की कोशिश कर रहे हैं? – SingleNegationElimination

उत्तर

51

यह एक जांच बाधा में मौजूदा पंक्ति से परे देखने के लिए समर्थित नहीं है।

http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html का कहना है:

एक चेक बाधा एक स्तंभ बाधा के रूप में निर्दिष्ट केवल उस स्तंभ के मूल्य का उल्लेख होना चाहिए, जबकि एक अभिव्यक्ति एक मेज बाधा में प्रदर्शित होने के एकाधिक स्तंभों संदर्भित कर सकते हैं।

वर्तमान में, चेक एक्सप्रेशन में उपक्विरी नहीं हो सकती है और न ही वर्तमान पंक्ति के कॉलम के अलावा चर का संदर्भ ले सकता है।

इस प्रतिबंध के लिए अच्छे कारण हैं, लेकिन यदि आप भारी यातायात के माध्यम से एक साइकिल की सवारी करते समय ज्वलंत मशालों को जोड़ना चाहते हैं, तो आप कार्यों का उपयोग करके प्रतिबंध को विचलित कर सकते हैं। जिन परिस्थितियों में यह काटने के लिए वापस आ जाएगा आप दुर्लभ हैं; आप बजाय ट्रिगर कोड में invariant को लागू करने के लिए अधिक सुरक्षित होगा।

http://www.postgresql.org/docs/9.1/interactive/triggers.html

+19

+1 "भारी आवागमन के माध्यम से एक साइकिल की सवारी करते समय जॉगल फ्लेमिंग मशाल" के लिए +1 :-) –

+4

प्रति [टॉम लेन की टिप्पणी] (http://www.postgresql.org/message-id/[email protected]), सबक्वायरी प्रतिबंध के आसपास हैकिंग की सलाह नहीं दी जाती है: _ "जांच एक पंक्ति के मूल्य पर बाधाओं को संभालने के लिए है ** ** अलगाव ** में। यदि आप क्रॉस-पंक्ति स्थितियों को लागू करने के लिए इसका उपयोग करने का प्रयास करते हैं, तो परियोजना निश्चित रूप से बुरी तरह खत्म हो जाएगी। _ – Shane

+2

हां, यह सच है: "जांच का उद्देश्य अलगाव में पंक्ति के मूल्य पर बाधाओं को संभालने के लिए है।" ... लेकिन: एक अनोखी बाधा क्या है? क्या यह "भारी आवागमन के माध्यम से एक साइकिल पर सवार होने पर आग लगाना" है? बीटीडब्ल्यू मैंने पहले से ही दोनों जॉगलिंग फ्लेमिंग मशालों और एक साइकिल की सवारी करने की कोशिश की है। अब तक मैं एक में नहीं कर सकता, लेकिन शायद भविष्य में। – guettli

संबंधित मुद्दे