MySQL присоединяется к той же таблице с несколькими условиями ON? - PullRequest
1 голос
/ 26 января 2012

Все еще новичок в MySQL, и я много раз просматривал предыдущие вопросы, пытаясь найти подходящее решение.

У меня есть две таблицы 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 TRIMD*ПоблагодаритьТом и Бореалид.

Ответы [ 3 ]

4 голосов
/ 26 января 2012

Чтобы сделать запрос, который вы написали, действительным, вам нужно назначить два разных имени отношения для двух использований одной и той же таблицы.

LEFT JOIN FDADrugsDB_Product FDA_first ON

и

LEFT JOIN FDADrugsDB_Product FDA_second ON

, а затем использоватьимена FDA_first и FDA_second для отдельного указания на результаты каждого набора.В противном случае механизм запросов не сможет сказать, что вы имеете в виду, когда говорите FDADrugsDB_Product - их два, каждый по-разному!

Однако я не уверен, что это то, что вы хотите сделать - присоединиться кТаблица дважды даст мультипликативное число результатов.Я думаю, что вы, возможно, хотели одно соединение с ON ... OR ..., что делает условие соединения "или" из двух причин для связи.

1 голос
/ 26 января 2012

Вам нужно дать псевдонимам таблиц, иначе 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) 
0 голосов
/ 26 января 2012
  ...
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 не содержат шаблонов совпадения.

...