2012-05-30 72 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 
     ;