অন্য একটি নির্বাচন করুন যেখানে দফায় নির্বাচন নির্বাচন করুন


21

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

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

উদাহরণ:

SELECT * FROM individual
INNER JOIN publisher
ON individual.individual_id = publisher.individual_id
WHERE individual.individual_id = 'here I would like to use the results of a another select'

এই অন্যান্য SELECTসহজভাবে হবে:

SELECT identifier FROM another_table WHERE something='something'

এখানে সরলীকৃত সারণী বিন্যাস, বিভিন্ন আইটেম_ টাইপগুলির জন্য বেশ কয়েকবার অস্বীকার ... (3 সম্পূর্ণ ভিন্ন ধরণের, সুতরাং অনুকূলিত হলে 3 এসকিউএল কোয়েরি) eries

table passage
  id_passage PK
  business_field_passage bytea

table item
  id_item PK
  id_passage FK
  business_field_item text

table item_detail
  id_item_detail PK
  id_item FK
  business_field_item_detail text
  image_content bytea

id_itemএক জন্য বেশ কয়েকটি আছে id_passage। এক জন্য
বেশ কয়েকটি আছে ।id_item_detailid_item

কীভাবে লিখবেন?
একটিকে অন্যটিতে সিলেক্ট করার ক্রিয়া বর্ণনা করার নাম কী (যদি থাকে)?



আপনি কি 7.2.1.3 উল্লেখ করছেন? সাবকিউরিজ?
স্টিফেন রোল্যান্ড

সম্ভবত হ্যাঁ, একসাথে যোগ অংশ।
dezso

উত্তর:


30

এটি কি আপনি লক্ষ্য করছেন? নিশ্চিত হয়ে নিন যে ক্ষেত্রগুলি তুলনা করা হচ্ছে (যেমন উভয় ক্ষেত্রগুলি সংখ্যাসূচক, পাঠ্য, বুলিয়ান ইত্যাদি)।

SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId = (SELECT someID FROM table WHERE blahblahblah)

আপনি যদি একাধিক মানের উপর ভিত্তি করে নির্বাচন করতে চান:

SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId IN (SELECT someID FROM table WHERE blahblahblah)

এটা কি সোজা এগিয়ে যেতে পারে ?? SELECT someID FROM table WHERE blahblahblahএকাধিক রেকর্ড থাকলে এটি এখনও কাজ করে ? আমি এখনই এটি পরীক্ষা করতে চাই।
স্টিফেন রোল্যান্ড

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

1
WHERE Individual.IndividualId IN...ভাল দেখাচ্ছে।
স্টিফেন রোল্যান্ড

10

আপনি কেবল এটি অন্য হিসাবে লিখতে পারেন JOIN। এটি সাধারণত সহজতম এবং দ্রুততম:

SELECT i.*, p.*
FROM   individual    i
JOIN   publisher     p USING (individualid)
JOIN   another_table a ON a.identifier = i.individualid
WHERE  a.something = 'something'

আমি কিছুটা সরল করে দিয়েছি এবং সনাক্তকারীদের কৃতজ্ঞ ক্যামেলকেস বানানটিও সরিয়ে দিয়েছি।


1
হ্যাঁ এটা. আমি যখনই ইন (নির্বাচন করুন) সিনট্যাক্সটি দেখি তখন আমি কিছুটা ভিতরে মারা যাই।
মার্ক স্টোর-স্মিথ

@ মার্কস্টোরী-স্মিথ আপনার কী বোঝাতে চেয়েছেন যে এটি সহজ এবং দ্রুততর চেয়ে অনেক বেশি: এই স্কেল কোডিংয়ের একটি মানদণ্ডের joinপরিবর্তে অন্যটি ব্যবহার করার in ( select...)ক্ষেত্রে এই ক্ষেত্রে আমারও উচিত এরউইনের উত্তরের উত্তরের জন্য ute
স্টিফেন রোল্যান্ড

1
@ স্টাফেনরোল্যান্ড তার দ্রুততর বা না প্ল্যাটফর্ম এবং সংস্করণ নির্ভর করবে। উদাহরণস্বরূপ এসকিউএল সার্ভার ২০০+ ইনার জয়েন এবং ইন (নির্বাচন করুন ...) সিনট্যাক্সের জন্য অভিন্ন বাস্তবায়ন পরিকল্পনা উত্পন্ন করবে। পোস্টগ্রেএসকিউএল-তে এটি প্রযোজ্য কিনা সে সম্পর্কে কোনও ধারণা নেই। পারফরম্যান্স একদিকে রেখে, IN (SELECT ...) স্টাইলটি আমাকে ভাবতে ছাড়ল যে লেখক এসকিউএল এর শব্দার্থবিজ্ঞান এবং ধারণাগুলি সম্পূর্ণরূপে উপলব্ধি করেছেন কিনা। AngrySpartan আপনার মূল প্রশ্নের সঠিক উত্তর দিয়েছে। ErwinBrandstetter আপনি আপনি দেখিয়েছেন উচিত এটা করতে :)।
মার্ক স্টোর-স্মিথ

6
@ মার্কস্টোরী-স্মিথ: একটি জয়ন সর্বদা কোনও IN অবস্থার সমতুল্য হয় না। কোনটি দ্রুত, প্রশ্নটি কোনটি সঠিক তা নয়।
a_horse_with_no_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.