2012-06-08 2 views
0

я пытаюсь присоединиться к 3 таблицы - e, wp, lПрисоединение 3 таблицы MySQL ж/запросов между

места как л: name | id | workplace_id

рабочих мест как сор: name | id

сотрудников как e: name | id | location_id | coordinator

Я хочу: , если на рабочем месте есть КООРДИНАТОР (Координатор = 1) в любом месте получить все объекты для этого МЕСТА

Это, кажется, не работает - она ​​возвращается все местами для рабочего места, которые имеют координатор = 1, но мне нужно все места для на рабочем месте, если в любом месте расположения рабочих мест есть координатор = 1.

select distinct w.* 
from workplaces as w, 
    (select distinct l.* 
    from locations as l, employees as e 
    where e.location_id = l.id and e.coordinator = 1) as tmp 
where tmp.workplace_id = w.id 

ответ

-1
select distinct l.* 
from locations as l, workplaces as w, 
    (select distinct l.* 
    from locations as l, employees as e 
    where e.location_id = l.id and e.coordinator = 1) as tmp 
where l.workplace_id = w.id 
and tmp.workplace_id = w.id 

Это то, что вы ищете?

-1

Прежде всего, подзапросы - это действительно плохая идея, и для создания объединений вы должны использовать любое из них: внутреннее соединение, левое соединение или правое соединение. Тогда у вас может быть что-то вроде этого:

SELECT l.* FROM locations as l 
INNER JOIN workplaces w ON l.workplace_id = w.id 
INNER JOIN employees e ON l.id = e.location_id 
WHERE e.coordinator = 1; 
+0

... которые дают именно то, что у Andypandy уже есть. – zessx

Смежные вопросы