MySQL变量,组_CONCAT不工作
我有一个问题,变量不等于输出。一只宠物有一个主人,这将尝试查看该主人是否有其他宠物,并将它们分组MySQL变量,组_CONCAT不工作,mysql,Mysql,我有一个问题,变量不等于输出。一只宠物有一个主人,这将尝试查看该主人是否有其他宠物,并将它们分组 SELECT o.id, o.last_name, @dog_names := GROUP_CONCAT(concat(p2.name,' (',REPLACE(REPLACE(p.type,'Big Dog','BD'),'Small Dog','LD'),')') SEPARATOR ', ') as dog_names, @dog_names as dog_variable, concat(o
SELECT
o.id,
o.last_name,
@dog_names := GROUP_CONCAT(concat(p2.name,' (',REPLACE(REPLACE(p.type,'Big Dog','BD'),'Small Dog','LD'),')') SEPARATOR ', ') as dog_names,
@dog_names as dog_variable,
concat(o.last_name,' - ',@dog_names) as label
FROM pets p
LEFT JOIN owners o ON p.owner_id = o.id
LEFT JOIN pets p2 ON p.owner_id = p2.owner_id
WHERE p.name = 'wolfie'
GROUP BY o.id
结果如下:
id | last_name | dog_names | dog_variable | label
1647 | Reeve | Wolfie (BD), Ember (BD) | Wolfie (BD) | Reeve - Wolfie (BD)
为什么dog_变量与dog_名称不匹配?它们是在同一级别计算的,没有特定的顺序。SQL就是这样工作的:它是声明性的,而不是过程性的,在任何查询中都不能在同一级别上假定求值顺序 换句话说,
@dog\u names作为dog\u变量
将使用较旧的值@dog\u names
,因为没有为此迭代重新计算if
如果希望它是正常的,则重复该表达式或使用嵌套查询
SELECT
id, last_name,
@dog_names := dog_names,
@dog_names as dog_variable,
concat(last_name,' - ', @dog_names) as label
FROM
(
SELECT
o.id,
o.last_name,
GROUP_CONCAT(concat(p2.name,' (',REPLACE(REPLACE(p.type,'Big Dog','BD'),'Small Dog','LD'),')') SEPARATOR ', ') as dog_names
FROM pets p
LEFT JOIN owners o ON p.owner_id = o.id
LEFT JOIN pets p2 ON p.owner_id = p2.owner_id
WHERE p.name = 'wolfie'
GROUP BY o.id, o.last_name
) x
既然如此,为什么要在GROUP_CONCAT中使用变量呢?只是在寻找其他方法来做事情。。这个嵌套查询非常有效。如何在不嵌套的情况下实现相同的结果?@Soth:不要使用变量,也就是说,重复GROUP_CONCAT表达式
SELECT
o.id,
o.last_name,
@dog_names := GROUP_CONCAT(concat(p2.name,' (',REPLACE(REPLACE(p.type,'Big Dog','BD'),'Small Dog','LD'),')') SEPARATOR ', '),
@dog_names as dog_names,
@dog_names as dog_variable,
concat(o.last_name,' - ',@dog_names) as label
FROM pets p
LEFT JOIN owners o ON p.owner_id = o.id
LEFT JOIN pets p2 ON p.owner_id = p2.owner_id
WHERE p.name = 'wolfie'
GROUP BY o.id