2012-05-30 242 views
1

DBNAME:table_name的加入多個領域一個領域

table : abc 
Remark1 Remark2 Remark3 Remark4 Remark5 
1  2  3  4  5 


table : xyz 
Kod_type description  
1  xxxx 
2  yyyy 
3  zzzz 
4  aaaa 
5  bbbb 

如何加入備註1,備註2,備註3,Remark4,Remark5與kod_type?

+3

您可能應該看看規範化該結構...備註1,2,3,4,5作爲列不是很好的關係設計。 –

+0

你需要1個描述取決於每個評論的5個評論或5個描述? – Aprillion

回答

0

記錄你做同樣的你會正常的方式 -

SELECT ABC.*, XYZ.* FROM XYZ, ABC 
WHERE 
XYZ.KOD_TYPE=ABC.REMARK1 
AND XYZ.KOD_TYPE=ABC.REMARK2 
AND XYZ.KOD_TYPE=ABC.REMARK3 
AND XYZ.KOD_TYPE=ABC.REMARK4 
AND XYZ.KOD_TYPE=ABC.REMARK5 

如果你需要查詢任何一個評論匹配es -

SELECT ABC.*, XYZ.* FROM XYZ, ABC 
WHERE 
XYZ.KOD_TYPE=ABC.REMARK1 
OR XYZ.KOD_TYPE=ABC.REMARK2 
OR XYZ.KOD_TYPE=ABC.REMARK3 
OR XYZ.KOD_TYPE=ABC.REMARK4 
OR XYZ.KOD_TYPE=ABC.REMARK5 
+0

偉大的回答你對我gve ...我如何把數據庫名稱?通常我使用dbname..tablename –

+0

通常您只需要預先安裝數據庫名稱。例如, table_name.XYZ.KOD_TYPE和table_name.ABC.REMARKS1 – Kshitij

+3

雖然這沒有錯,但值得注意的是,隱式聯接已過時20年。使用顯式連接的原因比沒有更多的原因(唯一可能的原因不是避免輸入額外的2個單詞)。在這個例子中使用它們的一個簡單理由是,如果XYZ中的每條記錄在ABC中沒有記錄,並且實際上需要'LEFT JOIN';如果有明確的連接,它需要將'INNER'改爲'LEFT',這是隱含的,它需要改變所有where子句來解決ABC中的NULL記錄。 – GarethD

1

使用AND條件與On子句,同時加入兩個表。

如果你想匹配所有備註欄應匹配Kod_Type

SELECT abc.*, 
     xyz.* 
FROM abc 
     INNER JOIN xyz 
       ON abc.Remark1 = xyz.Kod_Type 
        AND abc.Remark2 = abc.Remark1 
        AND abc.Remark3 = abc.Remark1 
        AND abc.Remark4 = abc.Remark1 
        AND abc.Remark5 = abc.Remark1 

如果你想在任何備註欄比賽到Kod_Type

SELECT abc.*, 
      xyz.* 
    FROM abc 
      INNER JOIN xyz 
        ON abc.Remark1 = xyz.Kod_Type 
         OR abc.Remark2 = xyz.Kod_Type 
         OR abc.Remark3 = xyz.Kod_Type 
         OR abc.Remark4 = xyz.Kod_Type 
         OR abc.Remark5 = xyz.Kod_Type 
+0

我敢肯定,OP意味着使用OR條件:) – Arvo

+0

如果OP需要OR,則用OR替換AND。 –

0

這個問題不是很清楚,但我認爲這樣的想法是有意的。

SELECT COALESC(d1.description, '') as description1 
     , COALESC(d2.description, '') as description2 
     , COALESC(d3.description, '') as description3 
     , COALESC(d4.description, '') as description4 
     , COALESC(d5.description, '') as description5 
FROM abc 
LEFT JOIN xyz d1 ON d1.kod_type=abc.remark1 
LEFT JOIN xyz d2 ON d2.kod_type=abc.remark2 
LEFT JOIN xyz d3 ON d3.kod_type=abc.remark3 
LEFT JOIN xyz d4 ON d4.kod_type=abc.remark4 
LEFT JOIN xyz d5 ON d5.kod_type=abc.remark5 
     ;