Mysql добавить второй запрос к тому же запросу, его сложно - PullRequest
0 голосов
/ 04 октября 2011

У меня есть это

kind of request:
    SELECT employers.employer_name, p.position_name,
         SUM(CASE WHEN w.type = 2 THEN 1 ELSE 0 END) AS booked,
         SUM(CASE WHEN (w.type = 3 OR w.type = 31) THEN 1 ELSE 0 END) AS placed
        FROM places AS p
              LEFT JOIN employers ON employers.id = places.employer
          LEFT JOIN (
            SELECT
              w.id,
              w.user_id,
              CASE x.pos WHEN 1 THEN w.pos1 ELSE w.pos2 END AS position,
              CASE w.type
                WHEN 39 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END
                ELSE w.type
              END AS type
            FROM workers AS w
              CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
          ) AS w
          ON w.position = p.pos_id
        GROUP BY p.pos_id, p.pos_name
        ORDER BY p.emp_id ASC, p.pos_id ASC

Мне нужно изменить его, чтобы добавить выбор places.position_name when workers.position2 = places.position_id Как я могу это сделать?

1 Ответ

0 голосов
/ 04 октября 2011

Мне немного непонятно, является ли place.position_id тем же столбцом, что и place.pos_id, и является ли worker.position2 таким же, как worker.pos2.Во всяком случае, я предположил, что они не равны, то есть точно так, как описано в вопросе.

Попробуй - может потребоваться подстройка столбца в зависимости от имени_позиции против_положения_позиции2 и позиции2:

SELECT employers.employer_name, p.position_name,
     case when w.position2 = p.position_id then p.position_name else 'no worker position found' end as worker_position_name,
     SUM(CASE WHEN w.type = 2 THEN 1 ELSE 0 END) AS booked,
     SUM(CASE WHEN (w.type = 3 OR w.type = 31) THEN 1 ELSE 0 END) AS placed
    FROM places AS p
          LEFT JOIN employers ON employers.id = places.employer
      LEFT JOIN (
        SELECT
          w.id,
          w.user_id,
          CASE x.pos WHEN 1 THEN w.pos1 ELSE w.pos2 END AS position,
          CASE w.type
            WHEN 39 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END
            ELSE w.type
          END AS type,
          w.pos2
        FROM workers AS w
          CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
      ) AS w
      ON w.position = p.pos_id
    GROUP BY p.pos_id, p.pos_name,w.position2,p.position_id,p.position_name
    ORDER BY p.emp_id ASC, p.pos_id ASC;  

Удачи!

...