আপনি কীভাবে একই টেবিলে, দু'বার, মাইএসকিএলে যোগদান করবেন?


110

আমার 2 টি টেবিল আছে একটিতে (ডোমেন) ডোমেন আইডস এবং ডোমেন নাম (dom_id, dom_url) রয়েছে।

অন্যটিতে প্রকৃত ডেটা রয়েছে, যার মধ্যে 2 টি কলামে একটি TO এবং FROM ডোমেন নাম প্রয়োজন। সুতরাং আমার কাছে দুটি কলাম রেভ_ডম_ফর্ম এবং রেভ_ডম_এর জন্য, উভয়ই ডোমেন সারণী থেকে ডোমেন নাম আইডি সঞ্চয় করে।

সহজ।

এখন আমার ওয়েবপৃষ্ঠায় উভয় ডোমেনের নামটি প্রদর্শন করতে হবে। আমি জানি যে কীভাবে একটি বা অন্যটিকে প্রদর্শন করতে হবে, পর্যালোচনা.আরভ_ডম_ফর্ম = ডোমেনস.ডোম_উর কোয়েরি বামে ডোমেনের মাধ্যমে এবং তারপরে আপনি ডোম_আরল প্রতিধ্বনিত করবেন যা ডোমেনের নামটি রেভ_ডম_ফর্ম কলামে প্রতিধ্বনিত করবে।

তবে আমি কীভাবে এটি ডোম_রেভ_ফর্ম কলামে ২ য় ডোমেন নামটি প্রতিধ্বনিত করব?

mysql 

উত্তর:


166

আপনি এই লাইন বরাবর কিছু যোগ দিতে চাই:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

সম্পাদনা :

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

এই মুহুর্তে পর্যালোচনা সারণিতে ডোমেন টেবিলটিতে যোগ দেওয়া বাম বিষয়। একবার ফর (টোড হিসাবে এলিয়াসেড), এবং দ্বিতীয়বারের জন্য (থেকে ডি হিসাবে এলিয়াসেড) এফআরওএম for

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

এসকিউএল এ্যালিয়াসিং সম্পর্কে আরও তথ্যের জন্য, এখানে পড়ুন


5
কৌশলটি হ'ল আপনি প্রতিটি জোনে একটি 'এএস টু' এবং 'এএস থেকে' এএস নামের সাথে শনাক্ত করেছেন যাতে আপনি সেলেকে তাদের ব্যবহার করতে পারেন।
ম্যাথু স্মিথ

1
একটি টেবিল নামের জন্য একটি অ মূলশব্দ ব্যবহার করে স্পষ্ট হবে। তদ্ব্যতীত, এলিয়াস করার সময় "হিসাবে" কীওয়ার্ডটি ব্যবহার করুন।
TheSoftwareJedi

আমাকে ক্ষমা করুন, তবে এটি কীভাবে কাজ করার কথা তা আমি এখনও বুঝতে পারি না। দুটি সারণী হ'ল: ডোমেন (ডোম_আইডি, ডোম_আরল) এবং পর্যালোচনা (রেভ_আইডি, রেভ_ডম_ফর্ম, রেভ_ডম_ফোর)। কেউ যদি সঠিক কোয়েরিটি লিখতে পারে তাই আমি এটির হ্যাঙ্গ পেতে পারি, এটি দুর্দান্ত হবে, কারণ আমার কী সম্পাদনা করতে হবে তা সম্পর্কে আমার কোনও ধারণা নেই।

1
টেবিলের রেফারেন্সিং সারি হিসাবে উপমাগুলি ভাবেন, টেবিলটি নিজেই নয়। উপমা অনুসারে, "for (i = 0; i <max; i ++)" এর মতো একটি লুপে আমি ভেরিয়েবলটি একটি পুনরাবৃত্তি মান, এটি নিজেই লুপ নয়।
বিল কারভিন

আমি জানতাম না আপনি এসকিউএল, গ্রেসিয়াস এ এটি করতে পারেন।
আদম এফ

8

নিম্নলিখিত সারণী দেওয়া ..

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

এই স্কয়ারটি ব্যবহার করে দেখুন ... (স্টিফেন রাইটন উপরে যে বিষয়টি লিখেছেন তা বেশ প্রায়) কৌশলটি হ'ল আপনি মূলত একই ক্যোয়ারিতে দুবার ডোমেন টেবিল থেকে নির্বাচন করছেন এবং ফলাফলগুলিতে যোগদান করছেন।

Select d1.dom_url, d2.dom_id from
review r, domain d1, domain d2
where d1.dom_id = r.rev_dom_from
and d2.dom_id = r.rev_dom_for

আপনি যদি এখনও আটকে থাকেন তবে দয়া করে এটির সাথে আরও সুনির্দিষ্ট হন যা আপনি বুঝতে পারেন না।


-1

এটি পড়ুন এবং চেষ্টা করুন, এটি আপনাকে সহায়তা করবে:

1 নং টেবিল

column11,column12,column13,column14

টেবিল ২

column21,column22,column23,column24


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21  INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22

table2asnew1 টেবিল 2 এর উদাহরণ যা মিলেছে table1.column11=table2asnew1.column21

এবং

table2asnew2 টেবিল 2 এর আরেকটি উদাহরণ যা মিলেছে table1.column12=table2asnew2.column22

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