আমি কীভাবে আইডি ব্যবহার করে একাধিক এসকিউএল টেবিলগুলিতে যোগদান করতে পারি?


141

আমার সাথে 4 টি আলাদা টেবিল রয়েছে যাতে আমি যোগ দিতে চাই। টেবিলগুলি নীচে কলামগুলি সহ কাঠামোযুক্ত:

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

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

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now())) 

আমি যখন ডি যোগ করার জন্য আরেকটি যোগ দেওয়ার চেষ্টা করি তখন আমি একটি ত্রুটি পাই যে 'টেবিলডি' অজানা:

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now())) 

উত্তর:


302

আপনি এর মতো আরও কিছু চান:

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now()) 

আপনার উদাহরণে, আপনি আসলে অন্তর্ভুক্ত করছেন না TableD। আপনাকে যা করতে হবে তা হ'ল আপনি আগে যেমন করেছেন তেমনই অন্য একটি যোগদান করা।

একটি নোট: আপনি লক্ষ্য করবেন যে আমি আপনার বন্ধুত্বগুলি অনেকগুলি সরিয়েছি, কারণ আপনার কাছে থাকা বেশিরভাগ ক্ষেত্রে সেগুলি সত্যই প্রয়োজন হয় না এবং কোডটি পড়ার চেষ্টা করার সময় কেবল বিভ্রান্তি যুক্ত করে। আপনার কোডকে পাঠযোগ্য ও পৃথক করে দেওয়ার উপযুক্ত উপায় হ'ল সঠিক বাসা বাঁধাই।


2
টেবিলএন নির্বাচন করবেন না * * কলাম লেবেলে সমস্ত মিলে যাওয়া প্রাথমিক কী আইডির নকল করবেন? (কোন আউটপুট কাঙ্ক্ষিত তা প্রশ্নটি নির্দিষ্ট করে নি তবে সাধারণত আপনি এটি করতে চান না বলে মনে করি)
হিদার স্টার্ক

6
আমি জিজ্ঞাসা পারে কেন JOINTableCহয় ON TableC.cID = TableB.cIDএবং TableC.cID = TableA.cID। আমি ধরে নিয়েছি যে আমরা TableAঅন্যান্য 3 টেবিলগুলিতে যোগ দিচ্ছি ।
emihir0

25
SELECT 
    a.nameA, /* TableA.nameA */
    d.nameD /* TableD.nameD */
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE()

4

আপনি টেবিলডিতে যোগদান করেন নি, কেবল dIDএকটি সারণী থেকে টেবিলডি ফিল্ড ( ) নির্বাচন করেছেন ।


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