Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

बहु-भाग पहचानकर्ता बाध्य नहीं हो सका

आप स्पष्ट जुड़ाव के साथ अंतर्निहित जोड़ मिला रहे हैं। इसकी अनुमति है, लेकिन आपको इस बात की जानकारी होनी चाहिए कि इसे ठीक से कैसे किया जाए।

बात यह है कि, स्पष्ट जुड़ाव (वे जो JOIN . का उपयोग करके कार्यान्वित किए जाते हैं) कीवर्ड) निहित लोगों पर वरीयता लेते हैं ('अल्पविराम' जुड़ता है, जहां जुड़ने की स्थिति WHERE में निर्दिष्ट होती है। खंड)।

यहां आपकी क्वेरी की रूपरेखा दी गई है:

SELECT
  …
FROM a, b LEFT JOIN dkcd ON …
WHERE …

आप शायद उम्मीद कर रहे हैं कि यह इस तरह का व्यवहार करेगा:

SELECT
  …
FROM (a, b) LEFT JOIN dkcd ON …
WHERE …

यानी, तालिकाओं का संयोजन a और b dkcd तालिका के साथ जुड़ा हुआ है . दरअसल, जो हो रहा है वह है

SELECT
  …
FROM a, (b LEFT JOIN dkcd ON …)
WHERE …

यानी जैसा कि आप पहले ही समझ चुके होंगे, dkcd विशेष रूप से b . के विरुद्ध शामिल हुआ है और केवल b , तो शामिल होने के परिणाम को a . के साथ जोड़ दिया जाता है और WHERE . के साथ आगे फ़िल्टर किया गया खंड। इस मामले में, a . का कोई भी संदर्भ ON . में खंड अमान्य है, a उस समय अज्ञात है। इसलिए आपको त्रुटि संदेश मिल रहा है।

अगर मैं तुम होते, तो शायद मैं इस प्रश्न को फिर से लिखने की कोशिश करता, और एक संभावित समाधान हो सकता है:

SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a
  INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen
  LEFT OUTER JOIN (
    SELECT
      maxa,
      COUNT(*) AS tong
    FROM khaosat
    WHERE CONVERT(datetime, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011'
    GROUP BY maxa
  ) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
ORDER BY a.maxa

यहां टेबल a और b पहले जुड़ते हैं, फिर परिणाम dkcd . से जुड़ जाते हैं . मूल रूप से, यह आपकी जैसी ही क्वेरी है, केवल एक जॉइन के लिए एक अलग सिंटैक्स का उपयोग करना, जो एक बहुत बड़ा अंतर बनाता है:संदर्भ a.maxa dkcd . में की शामिल होने की शर्त अब बिल्कुल मान्य है।

जैसा कि @Aaron बर्ट्रेंड ने सही ढंग से नोट किया है, आपको संभवतः maxa qualify के योग्य होना चाहिए एक विशिष्ट उपनाम के साथ, शायद a , ORDER BY . में खंड।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर त्रुटि 109:INSERT कथन में VALUES खंड में निर्दिष्ट मानों की तुलना में अधिक स्तंभ हैं

  2. मैं SQL सर्वर में लिंक किए गए डेटाबेस सर्वर कैसे बनाऊं और क्वेरी करूं?

  3. डेटाबेस मेल प्रोफाइल (SSMS) के भीतर किसी खाते की प्राथमिकता बदलें

  4. अनुक्रम बनाम पहचान

  5. SQL सर्वर में उपयोगकर्ता-परिभाषित फ़ंक्शन से SCHEMABINDING निकालें