যখন উপস্থিত সাবকিউরিটি উপস্থিতিগুলির সাথে পরিচয় করা হয় না তখন কেবলমাত্র একটি তালিকা নির্বাচন তালিকাতে নির্দিষ্ট করা যায়


178

আমার ক্যোয়ারীটি নীচে রয়েছে এবং এর মধ্যে একটি সাবকোয়ারি রয়েছে:

 select count(distinct dNum)
 from myDB.dbo.AQ
 where A_ID in 
  (SELECT DISTINCT TOP (0.1) PERCENT A_ID, 
            COUNT(DISTINCT dNum) AS ud 
 FROM         myDB.dbo.AQ
 WHERE     M > 1 and B = 0 
 GROUP BY A_ID ORDER BY ud DESC)

আমি যে ত্রুটিটি পাচ্ছি তা হ'ল ...

Only one expression can be specified in the select list when the subquery is not
introduced with EXISTS.`

আমি যখন একা সাব-কোয়েরি চালাচ্ছি, এটি ঠিক জরিমানা ফিরে আসে, তাই আমি ধরে নিচ্ছি যে মূল প্রশ্নের সাথে কিছু সমস্যা আছে?

উত্তর:


230

ধারাটিতে তুলনা করার জন্য আপনি আপনার subquery এ দুটি (বা একাধিক) কলাম ফিরে করতে পারবেন না WHERE A_ID IN (subquery)- এটি কোন স্তরের সাথে তুলনা A_IDকরার কথা? আপনার subquery এর অন্য দিকে কলামের সাথে তুলনা করার জন্য প্রয়োজনীয় একটি কলামটিই ফেরত দিতে হবে IN। সুতরাং কোয়েরিটি ফর্মের হওয়া দরকার:

SELECT * From ThisTable WHERE ThisColumn IN (SELECT ThatColumn FROM ThatTable)

আপনি বাছাইও যুক্ত করতে চান যাতে উপরের সারিগুলি থেকে আপনি কেবল নির্বাচন করতে পারেন, তবে আপনার সাজানোর জন্য আপনাকে COUNT টি কলাম হিসাবে ফেরত দিতে হবে না; ধারাটিতে বাছাই করা ORDERক্যোয়ারী থেকে ফিরে আসা কলামগুলির চেয়ে স্বতন্ত্র।

এরকম কিছু চেষ্টা করুন:

select count(distinct dNum) 
from myDB.dbo.AQ 
where A_ID in
    (SELECT DISTINCT TOP (0.1) PERCENT A_ID
    FROM myDB.dbo.AQ 
    WHERE M > 1 and B = 0
    GROUP BY A_ID 
    ORDER BY COUNT(DISTINCT dNum) DESC)

83

আপনি যেখানে একটি ভেরিয়েবলের জন্য ফেরত মান নির্ধারণ করেছেন সেখানে কোয়েরিতে কেবল একটি কলাম এবং একটি সারি ফিরে আসা উচিত। উদাহরণ:

select * from table1 where Date in (select * from Dates) -- Wrong
select * from table1 where Date in (select Column1,Column2 from Dates) -- Wrong
select * from table1 where Date in (select Column1 from Dates) -- OK

2
এটি আমাকে সাহায্য করে না। আমাকে একই ত্রুটি দেয়। *আমাকে সাহায্য করার পরিবর্তে কলামটি নির্দিষ্ট করা ।
মোহাম্মদসালিম শিবানী

11

এটা সম্পর্কে অভিযোগ

COUNT(DISTINCT dNum) AS ud 

subquery ভিতরে। আপনি একটি বিদ্যমান কোয়েরি না করে কেবল একটি কলাম সাবকোয়ারি থেকে ফিরে আসতে পারে। আপনি কেন একই কলামে দুবার একটি গণনা করতে চান তা আমি নিশ্চিত নই, অতিমাত্রায় আপনি যা করছেন তা অপ্রয়োজনীয় দেখায়। এখানে সাবকোয়ারিটি কেবলমাত্র একটি ফিল্টার যা এটি যোগ দেওয়ার মতো নয়। যেমন আপনি এটি ডেটা সীমাবদ্ধ করতে ব্যবহার করেন, কোন কলামগুলি ফিরে পেতে হবে তা নির্দিষ্ট করে না।


কখনও কখনও, আপনি প্রশ্নের ফলাফলের বিরুদ্ধে যোগ দিতে পারেন এবং এটি সমস্যার সমাধান করবে!
জোসেফডোগি

5

এখানে খুব ভাল প্রতিক্রিয়া বাদে আপনি নিজের সাব কোয়েরিটি যেমনটি ব্যবহার করতে চান তবে আপনি এটিও চেষ্টা করতে পারেন।

দৃষ্টীকোণ:

1) আপনার সাব কোয়েরি থেকে পছন্দসই কলামটি (কেবল 1) নির্বাচন করুন

2) কলামের নামটি কোথায় ম্যাপ করবেন তা ব্যবহার করুন

কোড:

 SELECT count(distinct dNum)
 FROM myDB.dbo.AQ
 WHERE A_ID in 
   (
    SELECT A_ID 
    FROM (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud 
          FROM         myDB.dbo.AQ
          WHERE     M > 1 and B = 0 
          GROUP BY A_ID ORDER BY ud DESC
         ) a 
   )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.