2012-03-10 13 views
22

मैं Postgres 9.1.3 में इस क्वेरी का उपयोग करने के कोशिश कर रहा हूँ के साथ साथ:Postgres "लापता FROM-खंड प्रविष्टि" क्वेरी पर त्रुटि खंड

ERROR: missing FROM-clause entry for table "stops" 
LINE 12: SET arrest_id = stops.stop 
         ^

********** Error ********** 

ERROR: missing FROM-clause entry for table "stops" 
SQL state: 42P01 
Character: 280 

मैं:

WITH stops AS (
    SELECT citation_id, 
      rank() OVER (ORDER BY offense_timestamp, 
        defendant_dl, 
        offense_street_number, 
        offense_street_name) AS stop 
    FROM consistent.master 
    WHERE citing_jurisdiction=1 
) 

UPDATE consistent.master 
SET arrest_id = stops.stop 
WHERE citing_jurisdiction=1 
    AND stops.citation_id = consistent.master.citation_id; 

मैं इस त्रुटि मिलती है मैं वास्तव में उलझन में हूँ। पोस्ट क्लॉर्स दस्तावेज के साथ सही खंड दिखाई देता है। अगर मैं अलग-अलग खंड में क्वेरी चलाता हूं, तो मुझे सही परिणाम मिलते हैं।

+0

व्हाउप्स! धन्यवाद। मैं कहने जा रहा था कि मैंने डायग्नोस्टिक चरण के रूप में ** स्टॉप ** टेबल का नाम बदलने की कोशिश की, लेकिन यह स्पष्ट रूप से मुद्दा नहीं है। –

उत्तर

28

fine manual से:

There are two ways to modify a table using information contained in other tables in the database: using sub-selects, or specifying additional tables in the FROM clause.

तो आप बस FROM खंड एक की जरूरत है:

WITH stops AS (
    -- ... 
) 
UPDATE consistent.master 
SET arrest_id = stops.stop 
FROM stops -- <----------------------------- You missed this 
WHERE citing_jurisdiction=1 
    AND stops.citation_id = consistent.master.citation_id; 

त्रुटि संदेश भी उतना ही कहते हैं:

ERROR: missing FROM-clause entry for table "stops"

+3

आप सही हैं! उन्हें यहां "बोनहेड" अंक देने की जरूरत है। मुझे लगता है कि मैंने अभी अर्जित किया है। –

+3

@ArenCambre: मुझे लगता है कि अगर ऐसी कोई चीज़ थी तो हम सभी को "हड्डी के" बिंदुओं का अधिक होना चाहिए :) देखने के लिए सबसे कठिन समस्याएं आपके चेहरे के सामने सही हैं। –

+2

बहुत अच्छा जवाब। बस एक छोटा सा सवाल: यह स्टॉप के बजाय स्टॉप से ​​होना चाहिए, है ना? – joragupra

1

यह भी हो सकता है अगर आप एक टेबल नाम गलत टाइप करें। उदाहरण के लिए:

UPDATE profiles SET name = (profile.first_name) WHERE id = 1 

के बजाय profiles मैं गलत तरीके से इस्तेमाल किया profile !! यह काम करेगा:

UPDATE profiles SET name = (profiles.first_name) WHERE id = 1 
संबंधित मुद्दे