MySQL выбрать из таблицы 2 так же, как в таблице 1 - PullRequest
0 голосов
/ 18 января 2012

У меня есть две таблицы

"работодатели":

  emp_id  empl_name     wage
    1     john          20/h
    2     mike          20/h
    3     sam           30/h

"позиции":

  pos_id  emp_id  pos_name   related_pos
    1      1      cleaner       0
    2      3      driver        3
    3      2      bodyguard     0

Мне нужно отобразить таблицу с Имя работодателя, Имя должности, Заработная плата, Имя соответствующей должности, Заработная плата Rel Pos, Работник Rel Pos

Теперь у меня есть запрос:

SELECT pos_name, empl_name, wage 
   FROM positions
      LEFT JOIN employers ON employers.emp_id = positions.emp_id

следующий запрос не работает, но дает представление о том, что мне нужно:

SELECT pos_name, empl_name, wage, (SELECT empl_name
                                      FROM positions 
                                         LEFT JOIN employers ON employers.emp_id = positions.related_pos) as emp2,
                                  (SELECT pos_name 
                                      FROM positions
                                         WHERE pos_id = related_pos) as pos2
   FROM positions
      LEFT JOIN employers ON employers.emp_id = positions.emp_id

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Кажется, вы только что сделали это более сложным, чем нужно. Вы ищете ссылки на таблицы, если я правильно понимаю. Разбейте это на три части:

Ваш SELECT должен включать имя работодателя, название должности, заработную плату, имя связанной должности, зарплату Rel Pos, работодателя Rel Pos

ОТ работодателей, должности

WHERE позиции.emp_id = Employers.emp_id

Это даст вам список всех предметов от работодателей, когда они соединяются с позициями.

Извините, если вы не это имели в виду. Дай мне кивок, если это так.

0 голосов
/ 18 января 2012

Я думаю, что этот код будет работать.

SELECT 
p.pos_name, 
p.empl_name, 
p.wage, 
(SELECT pos_name FROM positions WHERE pos_id = p.related_pos) as pos2
FROM positions as p
INNER JOIN employers as e ON e.emp_id = p.emp_id

Я удалил следующий код.

 (SELECT empl_name FROM positions 
  LEFT JOIN employers ON employers.emp_id = positions.related_pos) as emp2,

Поскольку я думаю, что есть две ошибки.Во-первых, в таблице нет столбца empl_name.Во-вторых, этот подзапрос даст более чем на результат за ряд.Это также относится к первому подзапросу, когда имеется более одной записи для emp_id

...