GROUP B বিবৃতিতে ওয়াইল্ডকার্ডগুলি কেন কাজ করে না?


29

আমি নিম্নলিখিত এসকিউএল স্টেটমেন্টটি কাজ করার চেষ্টা করছি, তবে আমি একটি সিনট্যাক্স ত্রুটি পেয়েছি:

SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.*

এখানে, এ 40 টি কলাম সহ একটি বিস্তৃত টেবিল এবং আমি যদি সম্ভব হয় তবে গ্রোপ বাই ক্লোজে প্রতিটি কলামের নাম তালিকা বর্জন করতে চাই। আমার কাছে এমন অনেকগুলি সারণী রয়েছে যার উপরে আমাকে একই ধরণের কোয়েরি চালাতে হবে, সুতরাং আমাকে একটি সঞ্চিত পদ্ধতি লিখতে হবে। এর কাছে যাওয়ার সর্বোত্তম উপায় কী?

আমি এমএস এসকিউএল সার্ভার 2008 ব্যবহার করছি।

উত্তর:


32

GROUP BY A.* এসকিউএল অনুমোদিত নয়।

আপনি এমন একটি সাবকিউরি ব্যবহার করে বাইপাস করতে পারেন যেখানে আপনি গ্রুপ করেছেন এবং তারপরে যোগদান করুন:

SELECT A.*, COALESCE(B.cnt, 0) AS Count_B_Foo
FROM TABLE1 AS A
  LEFT JOIN 
      ( SELECT FKey, COUNT(foo) AS cnt
        FROM TABLE2 
        GROUP BY FKey
      ) AS B 
    ON A.PKey = B.FKey ;

এসকিউএল -2003 স্ট্যান্ডার্ডের SELECTতালিকায় অনুমতি দেওয়ার জন্য একটি বৈশিষ্ট্য রয়েছে , কলামগুলি GROUP BYতালিকায় নেই যতক্ষণ না তারা কার্যত তাদের উপর নির্ভরশীল থাকে। যদি সেই বৈশিষ্ট্যটি এসকিউএল-সার্ভারে প্রয়োগ করা হত তবে আপনার ক্যোয়ারীটি এমনভাবে লেখা যেতে পারে:

SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.pk                          --- the Primary Key of table A

দুর্ভাগ্যক্রমে, এই বৈশিষ্ট্যটি এখনও কার্যকর করা হয়নি, এমনকি এসকিউএল-সার্ভার 2012 সংস্করণেও নয় - এবং আমি জানি অন্য কোনও ডিবিএমএসেও নয়। মাইএসকিউএল ব্যতীত যার এটি রয়েছে তবে অপর্যাপ্তভাবে (অপ্রতুলভাবে হিসাবে: উপরের ক্যোয়ারীটি কাজ করবে তবে ইঞ্জিন কার্যকরী নির্ভরতার জন্য কোনও চেক করবে না এবং অন্যান্য খারাপ লিখিত প্রশ্নগুলি ভুল, আধা-এলোমেলো ফলাফল প্রদর্শন করবে)।

@ মার্ক বাইয়ার্স যখন আমাদের একটি মন্তব্যে জানিয়েছিল, পোস্টগ্র্যাস এসকিউএল 9.1 এই উদ্দেশ্যে ডিজাইন করা একটি নতুন বৈশিষ্ট্য যুক্ত করেছে। এটি মাইএসকিউএল বাস্তবায়নের চেয়ে আরও বাধাজনক।


আপনি আরডিবিএমএসের এমন একটি দম্পতির উল্লেখ করতে পারেন যা স্ট্যান্ডার্ডের সেই অংশটি লিখিত হিসাবে প্রয়োগ করে? আমি জানি, উদাহরণস্বরূপ, যে মাইএসকিউএল আপনি (সঠিক সেটিংস দেওয়া) মধ্যে না আইটেম অন্তর্ভুক্ত অনুমতি দেবে GROUP BYদফা SELECTতালিকা, কিন্তু তা যা সারি হিসেবে undefined যে মান থেকে (তাই যদি কলাম বা অভিব্যক্তি আসবে ছেড়ে আইএসএন 'টি বৈশিষ্ট্যগুলি গোষ্ঠীবদ্ধ অভিব্যক্তি উপর নির্ভরশীল, তাহলে এটি হতে পারে দলের মধ্যে কোনো সারি থেকে আসা)।
অ্যাডাম রবিনসন 15

@ অ্যাডাম: না, আমি কোনও আরডিবিএমএস জানি না যা এটি প্রয়োগ করেছে। মাইএসকিউএল এর রয়েছে তবে অপর্যাপ্ত, আপনার মন্তব্য যেমন বলেছে।
ypercubeᵀᴹ

Gotcha। আমি আসলে জিজ্ঞাসা করছিলাম যে আছে কিনা, যেহেতু আমার কাছে এই সাইটটিতে প্রশ্নের উত্তর দেওয়ার বেশিরভাগ লোকের কল্পনা করার চেয়ে অনেক কম আরডিবিএমএসের অভিজ্ঞতা রয়েছে;) তবে এটি আমার সন্দেহ ছিল।
অ্যাডাম রবিনসন 15

3
"এবং আমি যতটা জানি অন্য কোনও ডিবিএমএসে নেই।" PostgreSQL 9.1 এই উদ্দেশ্যে নকশা করা একটি নতুন বৈশিষ্ট্য যুক্ত করেছে। এটি মাইএসকিউএল বাস্তবায়নের চেয়ে আরও বাধাজনক।
মার্ক বাইয়ার্স

@ মার্কবায়ার্স: থানেক্স, আমি এটি জানতাম না।
ypercubeᵀᴹ

24

@ ইয়ারকিউবের কর্মসংস্থান ছাড়াও, "টাইপিং" কখনও ব্যবহারের অজুহাত নয় SELECT *। আমি এই সম্পর্কে এখানে লিখেছি , এবং এমনকি কর্মক্ষেত্রের সাথেও আমার মনে হয় আপনার SELECTতালিকায় এখনও কলামের নামগুলি অন্তর্ভুক্ত করা উচিত - এমনকি যদি 40 এর মতো বিশাল সংখ্যাও থাকে।

দীর্ঘ গল্প সংক্ষিপ্ত, আপনি আপনার ক্যোয়ারী উইন্ডোতে অবজেক্ট এক্সপ্লোরার অবজেক্টের জন্য কলামগুলি নোড ক্লিক করে এবং টেনে এই বড় তালিকাগুলি টাইপ করা এড়াতে পারবেন। স্ক্রিন শটটি একটি দৃশ্য দেখায় তবে একই জিনিসটি কোনও টেবিলের জন্য করা যেতে পারে।

এখানে চিত্র বর্ণনা লিখুন

তবে আপনি যদি কোনও আইটেম কয়েক ইঞ্চি টেনে আনার প্রচেষ্টার এই বিশাল স্তরের নিজেকে কেন সাধ্যের কারণ হিসাবে সমস্ত কারণ সম্পর্কে পড়তে চান তবে দয়া করে আমার পোস্টটি পড়ুন । :-)


পোস্টগ্রেএসকিউএল-এ (ইএমএস এসকিউএল ম্যানেজার সহ) আমি একটি ভিউ হিসাবে সংজ্ঞা হিসাবে এটি করি SELECT *এবং তারপরে ভিউ সংজ্ঞা থেকে ক্ষেত্রের তালিকাটি অনুলিপি করি।
dezso

আমি অবশ্যই এটি একমত SELECT * এটি ব্যবহার করা উচিত নয় । GROUP BYযদিও আমি মামলাটি সম্পর্কে আগ্রহী । অ্যারন, তালিকায় গ্রুপে 40 টি কলাম থাকার দক্ষতার সমস্যা আছে?
ypercubeᵀᴹ

1
@ টাইপ्यूब - যতদূর আমি দেখেছি আপনি যদি A.PK, A.some, A.other, A.columnsএটির দ্বারা দলবদ্ধ করেন তবে এটির তুলনা করা আসলেই some, other, columnsবাক্যবিন্যাসের দ্বারা প্রয়োজনীয় by
মার্টিন স্মিথ

1
@ দাতাগোড দুঃখিত, না, কোনও ফাঁকগুলি কেবল এসএসএমএস দেব দলই ব্যাখ্যা করতে পারে। :-)
অ্যারন বার্ট্র্যান্ড

1
@ পেসারিয়র দুঃখিত, আমি সম্পূর্ণরূপে একমত নই , তবে সম্ভবত আপনি বিস্তারিত বলতে পারেন।
অ্যারন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.