仍然是一个mysql newb,我通过以前的问题广泛地查看了试图找到合适的解决方案。
我有两个表格CaseReportsTempImport2011Q3
和FDADrugsDB
,我想进行左联接以匹配CaseReportsTempImport2011Q3.drugname
与FDADrugsDB.ReferenceDrugName
和FDADrugsDB.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。
答案 0 :(得分:4)
要使您编写的查询有效,您需要为同一个表的两次使用分配两个不同的关系名称。
LEFT JOIN FDADrugsDB_Product FDA_first ON
和
LEFT JOIN FDADrugsDB_Product FDA_second ON
然后使用名称FDA_first
和FDA_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
,除非ReferenceDrug
和DrugName
包含匹配模式。