2012-07-11 20 views
6

मैं एक गलती की है और प्रवेश किया:एसक्यूएल रिटर्न सभी रिकॉर्ड

SELECT * FROM table LIMIT1

बजाय

SELECT * FROM table LIMIT 1

(LIMIT और 1 के बीच की जगह पर ध्यान दें) MySQL के CLI में । मुझे किसी प्रकार की पार्स त्रुटि प्राप्त होने की उम्मीद है, लेकिन मैं आश्चर्यचकित था, क्योंकि क्वेरी ने तालिका में सभी रिकॉर्ड लौटाए। मेरा पहला विचार "बेवकूफ MySQL था, मुझे लगता है कि यह PostgreSQL में त्रुटि लौटाएगा", लेकिन PostgreSQL ने सभी रिकॉर्ड भी वापस कर दिए। फिर उसी परिणाम के साथ SQLite के साथ इसका परीक्षण किया।

कुछ खोदने के बाद, मुझे एहसास हुआ कि इससे कोई फर्क नहीं पड़ता कि मैं तालिका के बाद क्या दर्ज करता हूं। जब तक वहाँ कोई WHERE/ORDER/GROUP खंड हैं:

SELECT * FROM table SOMETHING -- works and returns all records in table 

SELECT * FROM table WHERE true SOMETHING -- doesn't work - returns parse error 

मुझे लगता है कि यह एक मानकीकृत व्यवहार है, लेकिन क्यों है कि मैं किसी भी स्पष्टीकरण नहीं पा सके। कोई विचार?

+4

आप किसी भी तालिका एक प्रश्न में एक उपनाम दे सकते हैं के लिए के रूप में कीवर्ड के उपयोग के लिए मजबूर करना चाहते हैं। यह आपको स्वयं-जुड़ने में सक्षम बनाता है (एक ही तालिका को एक से अधिक बार निर्दिष्ट करें)। –

+2

@ निकोलामार्कोविनोविच स्पॉट ऑन।ओपी ने 'टेबल' को 'LIMIT1' के रूप में उपनाम दिया है, आपको जवाब के रूप में पोस्ट करना चाहिए। –

+1

यहां से संबंधित एकमात्र टैग सुझाव है 'sql' – Smandoli

उत्तर

12

आपका पहला प्रश्न इस क्वेरी एक मेज अन्य नाम का उपयोग करने के बराबर है:

SELECT * FROM yourtable AS LIMIT1 

AS कीवर्ड वैकल्पिक है। तालिका उपनाम आपको मूल तालिका नाम की बजाय उपनाम LIMIT1.foo का उपयोग करके उस तालिका के कॉलम को संदर्भित करने की अनुमति देता है। यह उपनामों का उपयोग करने के लिए उपयोगी हो सकता है यदि आप एक क्वेरी के भीतर तालिकाओं को एक छोटा या अधिक वर्णनात्मक उपनाम देना चाहते हैं। यदि आप टेबल में स्वयं शामिल होते हैं तो उपनामों का उपयोग करना आवश्यक है।

SQL lite documentation से:

AS keyword optional

+0

ओह! अच्छा ग्राफिक! वोट दें! – Smandoli

+0

अरे, इसके बारे में भूल गए। मैं हमेशा 'एएस' वाक्यविन्यास का उपयोग करता हूं। मैं 10 मिनट में जवाब स्वीकार करूंगा, धन्यवाद। – strkol

+0

मुझे इन ऑरडोक प्रकार के ग्राफिक्स से बहुत नफरत है: डी – Sebas

0
SELECT * FROM table LIMIT1; 

LIMIT1 यह एसक्यूएल द्वारा उपनाम के रूप में ले लिया है, कारण LIMIT1 एसक्यूएल का एक शाब्दिक सुरक्षित नहीं है। टेबल नाम के बाद कुछ और यह एक आरक्षित कीवर्ड हमेशा एसक्यूएल द्वारा टेबल उपनाम के रूप में नहीं लिया जाता है।

SELECT * FROM table LIMIT 1; 

जब आप सिर्फ तालिका नाम के बाद LIMIT इस्तेमाल किया, एसक्यूएल में पाया गया कि एक आरक्षित कीवर्ड के रूप में और व्यवहार के अनुसार इसके लिए काम किया। यदि आप क्वेरी में आरक्षित कुंजी शब्द का उपयोग करना चाहते हैं तो यह उद्धरणों में आरक्षित साहित्य को डालकर किया जा सकता है। की तरह ..

SELECT * FROM table `LIMIT`; 

या

SELECT * FROM table `LIMIT 1`; 

अब `के तहत कवर सभी शब्द` उद्धरण इलाज किया जाएगा के रूप में उपयोगकर्ता को परिभाषित किया। आम तौर पर हमने दिनांक, टाइमस्टैंप, सीमा इत्यादि के साथ गलती की है .. कीवर्ड कॉलम नामों के रूप में उनका उपयोग करके कीवर्ड।

+1

ओपी को कोई त्रुटि नहीं मिली ... ओपी त्रुटि की उम्मीद कर रहा था ... –

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