2012-02-21 19 views
14

मैं धातुओंएकाधिक अंदरूनी एक ही मेज से शामिल हों

की एक तालिका है
MetalID integer 
MetalName text 
MetalCode text 

आइटम तालिका

ItemID  integer 
ItemName text 
... 
Metal1  int Ref.-> metals.metalID 
Metal2  int Ref.-> metals.metalID 
Metal3  int Ref.-> metals.metalID 

मैं तीन MetalCodes

SELECT m.MetalCode as 'Metal1', m.MetalCode as 'Metal2',m.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m ON m.metalID=k.metal1 
INNER JOIN Metals AS m ON m.metalID=k.metal2 
INNER JOIN Metals AS m ON m.metalID=k.metal3 
WHERE k.ItemID=? 

चयन करने के लिए कोशिश कर रहा हूँ ऐसा लगता है कि मैं कर रहा हूँ यह पूरी तरह गलत कर रहा है। कृपया सहायता कीजिए।

+3

प्रति एक metalcode हो रही एक ही नाम के साथ कई अन्य नामों के नहीं हो सकता। – rid

+1

आप क्या हासिल करने की कोशिश कर रहे हैं? – YXD

उत्तर

20

आपको अपनी तालिकाओं के लिए एकाधिक उपनाम निर्दिष्ट करना चाहिए। आप उन सभी को बुला रहे हैं एम।

SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 
+2

अच्छा, हमने बिल्कुल वही उदाहरण कोड बिल्कुल उसी समय लिखा था। जुड़वां होना चाहिए। +1, वास्तव में :) –

+0

अच्छी तरह से! एसओ काम करता है जिस तरह से :) – Beatles1692

+0

अभी भी कुछ गलत है। मुझे परिणाम मिल रहा है -> जेएन, जेएन, जेएन जबकि विभिन्न धातुएं हैं – NCFUSN

2

इस प्रयास करें:

SELECT m.MetalCode as 'Metal1', n.MetalCode as 'Metal2'o.MetalCode as 'Metal3' 
FROM Item as k INNER JOIN Metals AS m ON m.metalID=k.metal1 
     INNER JOIN Metals AS n ON n.metalID=k.metal2 
     INNER JOIN Metals AS o ON o.metalID=k.metal3 
WHERE k.ItemID=? 
8

खैर, पूरी तरह से गलत नहीं। ;)

आप कहीं भी "आंतरिक शामिल हों धातु मीटर के रूप में" है, m जरूरतों कुछ अद्वितीय (नहीं m हर बार) किया जाना है। इस तरह

कोशिश कुछ (नहीं परीक्षण किया):

SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2', m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 
1
SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 

या सरल लेकिन पंक्ति

SELECT MetalCode 
FROM Item 
WHERE metalID = metal1 OR metalID = metal2 OR metalID = metal3 
संबंधित मुद्दे