Объедините несколько строк в одно соединение MySQL - PullRequest
3 голосов
/ 12 января 2012

Я не мог придумать лучшего способа задать этот вопрос, но здесь идет речь:

У меня есть 2 таблицы. Первый - это таблица предметов для печати этикеток. Мы назовем это pj_items Столбцы просто: job_id, part_num and qty

Вторая таблица представляет собой список отделок, называемый PartFinishes для деталей с двумя столбцами: PartNumber and FinishId

Когда я хочу получить информацию для принтера этикеток, который я использую:
select pj_items.part_num, pj_items.qty, PartFinishes.FinishId from pj_items
join PartFinishes on PartFinishes.PartNumber = pj_items.part_num
where job_id = 1

Этот запрос работает нормально и дает правильный результат, когда каждая часть имеет только один конец. Проблема в том, что на детали есть 2 или более отделки.

Например: деталь 99401326 имеет 2 конца. В моей таблице pj_items есть одна строка для этой части, чтобы я мог напечатать одну этикетку. Когда я использую этот запрос, он возвращает 2 строки для этой части с различными FinishId К сожалению, это приведет к печати 2 этикеток. Мне нужны оба этих покрытия в одном ряду, так как я хочу, чтобы только одна этикетка была напечатана с обоими FinishId.

У меня был похожий запрос, который возвращал финиши в виде новых столбцов (f1,f2,f3), но он все равно вернул бы 2 строки в данном примере с f1, определенным в первой строке, и f1 как ноль во второй строке. и f2 определяется во втором.

Как мне получить это в один ряд?

Надеюсь, это имеет смысл, у кого-нибудь есть предложения?

Если вам нужна дополнительная информация, дайте мне знать.

Спасибо!

EDIT:

В таблице pj_items могут быть повторяющиеся записи, и мне нужно сохранить их как отдельные строки. Мне просто нужно, чтобы все отделки для каждой части были в одном ряду с соответствующей частью.

* +1047 * Пример
Вот пример таблицы pj_items:
pj_items table

Вот соответствующая информация из таблицы PartFinishes:
PartFinishes table

А вот результат с использованием исходного запроса:
results

Что мне нужно в результате, так это то, что две строки 99401326 являются одной с обоими концами в этой строке, сохраняя при этом 2 отдельные строки для 99401077, так как я хочу 2 метки из них.

1 Ответ

2 голосов
/ 12 января 2012

Вы можете использовать GROUP_CONCAT, чтобы объединить все идентификаторы конца для данной детали в один столбец.

SELECT pj_items.part_num, 
       pj_items.qty, 
       GROUP_CONCAT(PartFinishes.FinishId) as FinishIds
FROM pj_items
JOIN PartFinishes 
  ON PartFinishes.PartNumber = pj_items.part_num
WHERE job_id = 1
GROUP BY PartFinishes.PartNumber

@ комментарий: Однако, если вы хотите сохранить строки из pj_items отдельно, вам нужно присоединиться к PartFinishes, уже сгруппированным по PartNumber:

SELECT pj_items.part_num, 
   pj_items.qty, 
   FinishesGrouped.FinishIds
FROM pj_items
JOIN 
  ( SELECT PartNumber, GROUP_CONCAT(FinishId) as FinishIds
    FROM PartFinishes
    GROUP BY PartNumber ) FinishesGrouped
ON
  pj_items.part_num = FinishesGrouped.PartNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...