美好的一天,
我正在尝试使用另一个SELECT查询的结果来更新表中的整个列。我正在尝试运行的查询是:
UPDATE
clients
SET
activity = (
SELECT
IFNULL(
GROUP_CONCAT(
CONCAT(
' ',
o.event_abr,
' ',
IFNULL(CONCAT(o.quantity,'x'),''),
IFNULL(o.price,'')
)
)
,'')
FROM
clients c
LEFT OUTER JOIN
orders o
ON
(c.id = o.client_id)
WHERE
c.id = clients.id
)
我到了
#1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '<>'
但是,如果我只运行SELECT,它只能将clients.id
改为某个整数
请帮助:)
答案 0 :(得分:1)
我猜你只想要一个相关的子查询:
UPDATE clients c
SET activity = (SELECT COALESCE(GROUP_CONCAT(' ', o.event_abr, ' ',
COALESCE(CONCAT(o.quantity, 'x'), ''),
COALESCE(o.price, '')
)
), '')
FROM orders o
WHERE c.id = o.client_id
);
注意:
UPDATE
子句之外更新的表。您可以将其表示为JOIN
,但您已经沿着子查询的路径走了。CONCAT()
不需要GROUP_CONCAT()
。它需要任意数量的参数。COALESCE()
是ANSI标准。因此我更喜欢它。GROUP_CONCAT()
很奇怪,从空格开始。