2015-08-24 2 views
0

Хорошо, я немного потерял ... не уверен, что это просто невозможно, или если я просто что-то пропустил ...Подзапрос с использованием значений из родительского запроса с запросом IN (...)?

У меня есть столбец «продукты» в «счетах», таблицу с разделенными запятыми списками идентификаторов продуктов (например, 1,2,3) и другую таблицу под названием «продукты», чьи SKU, которые я пытаюсь получить в одном запросе, и также доступны в виде списка с разделителями-запятыми , поэтому, если в исходном столбце «товары» содержится «1,2,3» в качестве записи, я хочу иметь еще один столбец «skus» в результатах, имеющих такие записи, как «DD093, RT883, KR933» (образцы образцов, соответствующие этому продукту идентификаторы).

Вот что у меня есть, что работает просто отлично (передавая конкретный список идентификаторов продукта):

SELECT i.*, (SELECT GROUP_CONCAT(sku) FROM products p WHERE p.id IN (1,2,3)) AS skus 
FROM invoices i 
WHERE 1 
ORDER BY i.id DESC 

и возвращает что-то вроде этого:

id | products | skus 
1 | 1,2,3 | DD093,RT883,KR933 

Но если я прохожу что-то вроде это:

SELECT i.*, (SELECT GROUP_CONCAT(sku) FROM products p WHERE p.id IN (i.products)) AS skus 
FROM invoices i 
WHERE 1 
ORDER BY i.id DESC 

разрывы запросов ...

так, как получить значения из i.products в подобном подзапросе?

И это возможно?

P.S. - Прежде чем вы даже предположите, что я нормализую данные или сужу о том, что я использую такую ​​ужасную настройку, имейте в виду, что это сделано специально, потому что создание отдельных записей для таблицы «счет-фактура» для каждого продукта будет усложнять гораздо больше вещей на front-end, и я не хочу, и мне не нужно туда ехать. Это всего лишь журнал сортов и сделает внешний интерфейс более привлекательным для этого одного столбца, и именно поэтому я пытаюсь сделать это в рамках одного запроса и спрашиваю, возможно ли это - если да, то каким образом? Если нет, я бы тоже хотел ответить на этот вопрос.

+0

Почему даже беспокоиться, пока вы нормализуете ужасный механизм сохранения данных с разделенным запятой skus? – Drew

+0

Это не вариант, и мне не нужно это делать для того, что мне нужно для выполнения здесь - это просто для журнала, но не более того. Я знаю, что я мог бы нормализовать все это, но тогда простая задача становится намного больше, чем я хочу, чтобы она была или нужна. И я не хочу запускать дополнительные запросы mysql для каждого набора результатов, чтобы получить соответствующие SKU - я пытаюсь сделать все это в рамках одного запроса mysql. –

+2

мы делаем наши кровати и должны спать в них – Drew

ответ

1

А это возможно?

Возможно, трудно сказать точно без проверки. Вы могли бы попробовать что-то вроде:

SELECT i.*, (
    SELECT GROUP_CONCAT(sku) FROM products p 
    WHERE FIND_IN_SET(p.id, i.products) > 0 
) AS skus 
FROM invoices i 
WHERE 1 
ORDER BY i.id DESC 
+0

вот и все! отличный маленький запрос. Спасибо! –

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