Попытка использовать поле MySQL для конкатенации, а затем вставить в другую таблицу - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь использовать этот запрос ниже, чтобы получить изображения из таблицы изображений (которые могут возвращать несколько результатов), а затем вставить их в изображение поля таблицы продуктов.Таким образом, таблица изображений может иметь значения testsku, url1 и testsku, url2 и testsku, url3.Затем мне нужно обновить таблицу продуктов, где sku равно testsku, а поле изображения будет url1$^$url2$^$url3.Также обратите внимание, что test-sku изображения должны быть объединены с testsku изображениями.

INSERT INTO `products` (image) (SELECT images.sku, group_concat(images.image separator '$^$') 
FROM `images`,`products` 
GROUP BY images.sku) 
WHERE (images.sku=products.sku 
    OR images.sku=CONCAT(products.style,'-',products.color)) 
    AND products.sku='testsku'

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

РЕДАКТИРОВАТЬ:

Используя следующий оператор,Я могу вернуть URL-адреса «test-sku» и «testku» в один и тот же ряд.Однако у меня все еще возникают проблемы с обновлением таблицы продуктов, чтобы найти тестку и обновить поле изображения с возвращенным значением.Также обратите внимание, что мне нужно будет удалить предложение 'testsku', чтобы оно могло выполняться для всех skus.

SELECT p.sku, group_concat (разделитель i.image '$ ^ $') FROM images i, products p WHERE (i.sku = p.sku ИЛИ i.sku = CONCAT (p.style, '-', p.color)) И p.sku = 'testsku' GROUP BY p.sku

1 Ответ

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

Я могу заметить три вещи, которые возникли у меня после просмотра вашего кода.

1.Вы пытаетесь вставить в один столбец в столбце продуктов, но вложенный запрос выбора вернет два столбца.Что может привести к несоответствию ни в одном из столбцов в запросе вставки.Я думаю, что вам может потребоваться удалить images.sku из списка столбцов Select.

2. Вы заметили, что выполняете перекрестное соединение в запросе Select.(без объединения), что приводит к появлению nxm строк в результирующем наборе.

3.Вы используете таблицу Product два раза, один раз при вставке и второй раз при выборе.Это создаст двусмысленность.Назначьте им уникальные псевдонимы.

Ваш запрос может быть примерно таким после изменений ..

INSERT INTO `products` as p1 (image) values (SELECT group_concat(images.image separator '$^$') 
FROM `images`,`products` as p2 
GROUP BY images.sku) 
WHERE (images.sku=p1.sku 
    OR images.sku=CONCAT(p1.style,'-',p1.color)) 
    AND p1.sku='testsku'

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...