1052: ক্ষেত্র তালিকার কলাম 'আইডি' অস্পষ্ট


99

আমার 2 টি টেবিল আছে tbl_namesএবং tbl_sectionযা তাদের উভয় idক্ষেত্র আছে। আমি idক্ষেত্র নির্বাচন সম্পর্কে কীভাবে যাব , কারণ আমি সর্বদা এই ত্রুটিটি পাই:

1052: Column 'id' in field list is ambiguous

এখানে আমার জিজ্ঞাসা:

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

আমি কেবল সমস্ত ক্ষেত্র নির্বাচন করতে এবং ত্রুটি এড়াতে পারি। তবে এটি পারফরম্যান্সে অপচয় হবে। আমার কি করা উচিৎ?

উত্তর:


156

এসকিউএল পুরো টেবিলের নামটি দিয়ে রেফারেন্সটিকে উপস্থাপন করে একটি কলামকে যোগ্য করে তোলে:

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 

... বা একটি টেবিলের নাম:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 

সারণী ওরফে প্রস্তাবিত পন্থা - আপনার চেয়ে বেশি টাইপ করুন কেন?

কেন এই প্রশ্নগুলি আলাদা দেখায়?

দ্বিতীয়ত, আমার উত্তরগুলি ANSI-92 JOIN সিনট্যাক্স ব্যবহার করে (আপনারটি ANSI-89)। তারা একই সম্পাদন করার সময়, এএনএসআই -৯৯ সিনট্যাক্স আউটর যোগদানের (রাইট, বাম, পুরো) সমর্থন করে না। এএনএসআই -৯৯ সিনট্যাক্সটিকে অবহেলিত হিসাবে বিবেচনা করা উচিত, এসও-তে অনেকে আছেন যারা এএনএসআই -৯৯ সিনট্যাক্সকে শক্তিশালীকরণের পক্ষে ভোট দেবেন না। জন্য আরও তথ্যের জন্য, এই প্রশ্ন দেখতে পাবেন


বিভ্রান্তিকর! এসকিউএল ভাষা থেকে আসলে কিছুই অপসারণ না হওয়ায় এসকিউএল -৯৯ এসকিউএল -৯৯ এর একটি উপযুক্ত উপসেট। ওপি'র সিনট্যাক্সটি বৈধ এসকিউএল -৯৯ সিনট্যাক্স (এবং। আমি যদি কিছু মিস করছি না তবে আপনার বৈধ এসকিউএল -৯৯ বাক্য গঠন)। INNER JOINএসকিউএল -২৯ চালু হওয়ার পর থেকে আমি 'অবচয়' বলে বিবেচনা করি NATURAL JOIN
onedaywhen

17

আপনার SELECTবিবৃতিতে আপনার আইডিটি আপনি যে টেবিলটি থেকে চয়ন করতে চান তার সাথে প্রিফেস করতে হবে।

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

বা

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

এটি কেবলমাত্র idক্ষেত্রের মধ্যে একটি ফেরত দেয় ; ওপিতে বলা হয়েছে "কেবলমাত্র সমস্ত ক্ষেত্র নির্বাচন করুন এবং ত্রুটিটি এড়ান।" এবং, আমি এএনএসআই -৯৯ সিনট্যাক্সের পক্ষে ভোট দিই না।
ওএমজি পনিজ

রাজি হলেও প্রশ্নটি ছিল আইডি ক্ষেত্রটি কীভাবে নির্বাচন করবেন।
তারিন

6

আপনি একটি সম্পূর্ণরূপে যোগ্য নাম প্রদান করে তা করবেন, যেমন:

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id

যা আপনাকে টিবিএল_নামের আইডি দেবে


নীলফীটের উত্তরে আমার মন্তব্য দেখুন
ওএমজি পনিস

এটি কোনও 'সম্পূর্ণ যোগ্য নাম' নয়, এটি একটি পরিসীমা পরিবর্তনশীল। আপনি যখন একটি সুস্পষ্ট ব্যাপ্তি ভেরিয়েবল বাদ দেন, এসকিউএল একটি টেবিলের নামের সমান একটি উত্পন্ন করে। আমি কী বলতে চাইছি তা আরও ভালভাবে দেখতে, আপনার FROMধারাটি পরিবর্তন করুন ...FROM tbl_names tbl_names, tbl_section tbl_section WHERE...- এটি কোনও পার্সার একটি পরিসীমা ভেরিয়েবল জেনারেট করার জন্য করছে।
onedaywhen

4

সবচেয়ে সহজ সমাধানটি USINGপরিবর্তে এর সাথে যুক্ত হওয়া ON। এইভাবে, ডাটাবেসটি "জানে" যে উভয় idকলামই একইরকম এবং এটিতে নিটপিক করা হবে না:

SELECT id, name, section
  FROM tbl_names
  JOIN tbl_section USING (id)

যদি idএর মধ্যে একমাত্র সাধারণ কলামের নাম হয় tbl_namesএবং tbl_sectionআপনি এমনকি এটি ব্যবহার করতে পারেন NATURAL JOIN:

SELECT id, name, section
  FROM tbl_names
  NATURAL JOIN tbl_section

আরও দেখুন: https://dev.mysql.com/doc/refman/5.7/en/join.html


3

আপনি সম্ভবত এখানে যা করতে চাইছেন তা হ'ল ইউনিয়ন অপারেটরটি ব্যবহার করুন:

(select ID from Logo where AccountID = 1 and Rendered = 'True')
  union
  (select ID from Design where AccountID = 1 and Rendered = 'True')
  order by ID limit 0, 51

এটির জন্য ডকস এখানে https://dev.mysql.com/doc/refman/5.0/en/union.html


3

ইতিমধ্যে আপনার প্রশ্নের উত্তর প্রচুর আছে, আপনি এটি এটি এই মতো করতেও পারেন। আপনি আপনার টেবিলটিকে একটি উপনামের নাম দিতে পারেন এবং এটির মতো নির্বাচনের ক্যোয়ারিতে এটি ব্যবহার করতে পারেন:

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;

0

যদি দুটি টেবিলের আইডির ফর্ম্যাট পরিবর্তিত হয় তবে আপনি তাদের সাথে যোগ দিতে চান, যেমন আপনি একটি-প্রধান টেবিল থেকে একটি আইডি ব্যবহার করতে পারেন, আপনার কাছে আছে কিনা তা বলতে পারেন table_customesএবং table_ordersআদেশের জন্য থ্যা আইডি " 101 " এর মতো, " ১০০ " ... " ১১০ ", গ্রাহকদের জন্য কেবল একটি ব্যবহার করুন

select customers.id, name, amount, date from customers.orders;

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