2013-04-18 3 views
0

У меня есть следующий запрос:Почему я получаю «Неоднозначное имя столбца» в этом запросе?

$sql = "SELECT * FROM employee AS emp LEFT JOIN tr_bls_date AS bls ON emp.employee_id=bls.employee_id AND employee_id='".$id."'"; 

В принципе, оба emp и bls столов имеют общую employee_id поля. Я ищу определенного сотрудника по ID сотрудника ($id). Что я здесь делаю неправильно?

ответ

3

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

ON emp.employee_id = bls.employee_id AND 
    emp.employee_id = ?  // this will search on table employee 
+1

@FreshPrinceOfSO Нет. Не имеет никакого отношения к 'SELECT *'. Это при условии. Попробуй это. –

2

Вы делаете left join, поэтому вы должны использовать псевдоним для emp:

. . . 
emp.employee_id=bls.employee_id AND emp.employee_id=. . . 

Вы должны использовать псевдоним из первой таблицы в left join, потому что вы всегда гарантируется, что это имеет значение.

+0

Это было бы неоднозначно с внутренним соединением. –

+0

@ DanBracuk. , , Совершенно верно. Ссылка только на тот алиас, который следует использовать. С левым внешним соединением это имеет значение. –