MySQL加入同一个表有多个ON条件?

时间:2012-01-26 16:54:13

标签: mysql join conditional-statements

仍然是一个mysql newb,我通过以前的问题广泛地查看了试图找到合适的解决方案。

我有两个表格CaseReportsTempImport2011Q3FDADrugsDB,我想进行左联接以匹配CaseReportsTempImport2011Q3.drugnameFDADrugsDB.ReferenceDrugNameFDADrugsDB.DrugName

我设想的是:

SELECT DISTINCT(CaseReportsTempImport2011Q3.DRUGNAME)
, FDADrugsDB_Product.drugname
, FDADrugsDB_Product.ReferenceDrug
, FDADrugsDB_Product.activeingred
FROM CaseReportsTempImport2011Q3
LEFT JOIN FDADrugsDB_Product ON CaseReportsTempImport2011Q3.DRUGNAME LIKE TRIM(FDADrugsDB_Product.ReferenceDrug) 
LEFT JOIN FDADrugsDB_Product ON CaseReportsTempImport2011Q3.DRUGNAME LIKE TRIM(FDADrugsDB_Product.DrugName) 
ORDER BY LENGTH(CaseReportsTempImport2011Q3.DRUGNAME) ASC

但这不起作用我得到'不唯一的表/别名:'FDADrugsDB_Product'' - 有什么帮助吗?

由于

编辑更好的解决方案请求/ REPHRASE Per borealids“但是,我不确定这是你想要做的事情 - 两次加入表会产生乘法数量的结果。我想你可能想要一个加入ON ...或者......,制作连接条件是连接的两个原因中的“或”。“

我想知道如何做到这一点。

ON CaseReportsTempImport2011Q3.DRUGNAME LIKE TRIM(FDADrugsDB_Product.ReferenceDrug)或CaseReportsTempImport2011Q3.DRUGNAME LIKE TRIM(FDADrugsDB_Product.DrugName

谢谢tom和borealid。

3 个答案:

答案 0 :(得分:4)

要使您编写的查询有效,您需要为同一个表的两次使用分配两个不同的关系名称。

LEFT JOIN FDADrugsDB_Product FDA_first ON

LEFT JOIN FDADrugsDB_Product FDA_second ON

然后使用名称FDA_firstFDA_second来明确地引用每个集合的结果。否则,当您说FDADrugsDB_Product时,查询引擎无法说出您的意思 - 其中有两个,每个都不同!

但是,我不确定这是你想要做什么 - 连接表两次将产生乘法数量的结果。我想你可能想要一个ON ... OR ...的加入,使加入条件成为联系的两个原因中的“或”。

答案 1 :(得分:1)

您需要提供表别名,否则MySql将不知道您正在谈论的FDADrugsDB表的哪个实例。即

FROM CaseReportsTempImport2011Q3 a
LEFT JOIN FDADrugsDB_Product b ON CaseReportsTempImport2011Q3.DRUGNAME LIKE    TRIM(FDADrugsDB_Product.ReferenceDrug) 
LEFT JOIN FDADrugsDB_Product c  ON CaseReportsTempImport2011Q3.DRUGNAME LIKE TRIM(FDADrugsDB_Product.DrugName) 

答案 2 :(得分:0)

  ...
FROM
  CaseReportsTempImport2011Q3  i
  LEFT JOIN FDADrugsDB_Product p ON    i.DRUGNAME LIKE TRIM(p.ReferenceDrug) 
                                    OR i.DRUGNAME LIKE TRIM(p.DrugName) 
ORDER BY 
  LENGTH(i.DRUGNAME) ASC

请注意,您应该使用=代替LIKE,除非ReferenceDrugDrugName包含匹配模式。