आपकी क्वेरी का कोई मतलब नहीं है।
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
user
कहां होगा से आते हैं? यह क्वेरी में संदर्भित नहीं है। क्या यह database_userprofile
. का कॉलम है? ? अगर ऐसा है, तो आप user.username
नहीं लिख सकते हैं (जब तक कि यह एक समग्र प्रकार न हो, उस स्थिति में आपको (user).username
लिखना होगा। पार्सर को यह बताने के लिए कि; लेकिन मुझे संदेह है कि यह एक समग्र प्रकार है)।
इसका तात्कालिक कारण यह है कि user
एक आरक्षित शब्द . है
. आप उस नाम को उद्धृत किए बिना उसका उपयोग नहीं कर सकते:
DELETE FROM database_userprofile WHERE "user".username = 'some';
... हालांकि, इस क्वेरी का अभी भी कोई मतलब नहीं है, यह केवल एक अलग त्रुटि देगा:
regress=> DELETE FROM database_userprofile WHERE "user".username = 'some';
ERROR: missing FROM-clause entry for table "user"
LINE 1: DELETE FROM database_userprofile WHERE "user".username = 'so...
मेरा जंगली अनुमान यह है कि आप शामिल होने पर हटाने का प्रयास कर रहे हैं। मुझे लगता है कि आपके पास टेबल हैं जैसे:
CREATE TABLE "user" (
id serial primary key,
username text not null,
-- blah blah
);
CREATE TABLE database_userprofile (
user_id integer references "user"(id),
-- blah blah
);
और आप दूसरी तालिका में एक शर्त के साथ हटाने का प्रयास कर रहे हैं।
अगर ऐसा है, तो आप नहीं कर सकते हैं बस लिखें user.username
. आपको अवश्य उपयोग करना चाहिए:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';
आप देखेंगे कि मैंने "उपयोगकर्ता" को दोहरा-उद्धृत किया है। ऐसा इसलिए है क्योंकि यह एक कीवर्ड है और इसका उपयोग वास्तव में टेबल नामों या अन्य उपयोगकर्ता परिभाषित पहचानकर्ताओं के लिए नहीं किया जाना चाहिए। इसे दोहरा-उद्धृत करना इसे एक पहचानकर्ता के रूप में व्याख्या करने के लिए मजबूर करता है न कि एक कीवर्ड के रूप में।