मैं इनर जॉइन की मूल अवधारणा को समझता हूं लेकिन मुझे इस विशेष मामले में परेशानी हो रही है (निम्नलिखित तीन टेबल, पीके = प्राथमिक कुंजी, एफके = विदेशी कुंजी) -:

tbl_goal_context (many-to-many table)
rowId(PK)  |  goalRowId(FK)  |  contextRowId (FK)  |
1          |  2              |  5                  |
tbl_context_items
rowId(PK)  |  ...  |
5          |  ...  |
tbl_context_categories_items (many-to-many table)
rowId(PK)  |  catRowId(FK)  |  itemRowId(FK)  |
1          |  3             |  5              |

मैं tbl_context_items से पंक्तियों को सूचीबद्ध करने का प्रयास कर रहा हूं जो दो कई-से-अनेक तालिकाओं के माध्यम से जुड़े हुए हैं जहां catRowId और targetRowId ज्ञात हैं।

इसलिए, उदाहरण के लिए, मान लें कि मैं tbl_context_items से उन सभी पंक्तियों को खींचना चाहता हूं जो goalRowId = 2 और catRowId = 3 से जुड़ी हैं।

यहां मेरा प्रयास है (उपरोक्त उदाहरण संख्याओं का उपयोग करके), जो मुझे त्रुटि दे रहा है: "त्रुटि: अस्पष्ट कॉलम नाम: tbl_goal_context.goalRowId कथन निष्पादित करने में असमर्थ"

SELECT tbl_context_categories_items.itemRowId, tbl_context_categories_items.catRowId, tbl_goal_context.goalRowId, tbl_goal_context.contextRowId, tbl_context_items.rowId AS rowId, tbl_context_items.shortText AS shortText, tbl_context_items.userMade AS userMade
    FROM tbl_context_categories_items
    INNER JOIN tbl_goal_context ON tbl_goal_context.contextRowId = tbl_context_items.rowId
    INNER JOIN tbl_goal_context ON tbl_context_categories_items.itemRowId = tbl_context_items.rowId
    WHERE tbl_context_categories_items.catRowId = 3
        AND tbl_goal_context.goalRowId = 2
    ORDER BY tbl_context_items.shortText ASC

क्या इनर जॉइन यहां पूरी तरह उपयुक्त नहीं हैं? क्या मुझे उप-क्वेरी चाहिए?

-1
John 4 अक्टूबर 2018, 22:22

1 उत्तर

सबसे बढ़िया उत्तर

अस्पष्टता यह है कि आप tbl_goal_context में दो बार शामिल हो रहे हैं (इसलिए समान कॉलम नामों के 2 सेट, और इसलिए अस्पष्टता)।

जुड़ने की तर्ज पर अधिक होगा: -

FROM tbl_context_categories_items
    INNER JOIN tbl_context_items ON tbl_context_categories_items.itemRowid = tbl_context_items.rowid
    INNER JOIN tbl_context_categories ON tbl_context_categories_items.catRowid
    INNER JOIN tbl_goal_context ON tbl_context_items.rowid = tbl_goal_context.contextRowid
    INNER JOIN tbl_goal_items ON tbl_goal_context.goalRowid = tbl_goal_items.rowid

यह आरेख के अनुसार सभी तालिकाओं में शामिल हो जाता है (हालांकि क्वेरी के लिए अंतिम जॉइन आवश्यक नहीं है क्योंकि आप tbl_goal_items से कोई कॉलम शामिल नहीं करते हैं)।

2
user10438974user10438974 4 अक्टूबर 2018, 22:21