MYSQL Query Cross Database Join возвращает NULL

select t1.CardID,t2.Description,t5.BioData 
from db2.tblemployeeinfob t1
left join (db2.tbldepartments t2,db1.tblbiometrics t5)
on 
(t1.Department = t2.DepartmentID and
t1.CardID=t5.CardID
)

Результат возврата: 1420 | (NULL) | (NULL)

Ожидаемый результат: 1420 | DB2_Description_Value | DB1_BioData_value

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

если я выполняю перекрестное объединение баз данных между db1 и db2, даже таблица t2 из той же базы данных db2 возвращает NULL.

Где проблема с моим запросом, поэтому я могу получить значение из обеих баз данных.


person Wasim A.    schedule 15.07.2012    source источник
comment
одна вещь, которую вы можете сделать, это также префикс dbname вместе с именами таблиц   -  person nawfal    schedule 16.07.2012


Ответы (1)


Вы не должны использовать перекрестное соединение здесь. Вам нужны два отдельных левых соединения:

SELECT t1.CardID, t2.Description, t5.BioData 
FROM db2.tblemployeeinfob AS t1
LEFT JOIN db2.tbldepartments AS t2 ON t1.Department = t2.DepartmentID
LEFT JOIN db1.tblbiometrics AS t5 ON t1.CardID = t5.CardID
person Mark Byers    schedule 15.07.2012
comment
одна проблема решена, теперь я могу получить значение из второй таблицы из той же базы данных, но значение из db1 по-прежнему равно NULL - person Wasim A.; 16.07.2012
comment
@Wasim: Это потому, что значение не существует в db1. - person Mark Byers; 16.07.2012
comment
правильно, можете ли вы объяснить, почему я не могу использовать одно LEFT JOIN в кросс-базе данных - person Wasim A.; 16.07.2012
comment
@Wasim: он будет совпадать только в том случае, если в обеих таблицах существуют совпадающие значения. Если значение отсутствует в какой-либо из таблиц, все соединение завершится ошибкой, и вы получите значения NULL для обеих, даже если одно из них присутствует. - person Mark Byers; 16.07.2012