表:
Table: persona Table: AssPersona
Name Number | ID food
----------------- |-----------------------
Giovanni 1 | 1 Ananas
Marco 2 | 2 Banana
Leonardo 3 | 4 ChocolateCoco
我想在桌子上放SELECT所有东西IDAssPersona
这是我的代码:
SELECT persona.Name as Name, AssPersona.food As Food
FROM AssPersona
INNER JOIN persona ON
persona.number = AssPersona.ID
GROUP BY Name
但是我得到的结果是:
Name Food
---------------------------
Giovanni Ananas
Marco Banana
我想获得什么:
Name Food
---------------------------
Giovanni Ananas
Marco Banana
4 ChocolateCoco
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
看起来你想要获取所有AssPersona
表中的记录,同时如果这些记录在persona
表中有对应的Number
,则显示相应的Name
。对于那些在persona
表中没有匹配项的记录,你希望直接显示ID
和food
。为了实现这个需求,可以使用LEFT JOIN
来替代INNER JOIN
,这样即使在persona
表中找不到匹配项,AssPersona
表中的记录也会被包含在结果中。同时,你需要调整GROUP BY
子句以适应新的查询逻辑,或者可能不需要它,具体取决于你是否真的需要分组以及如何处理重复值。
下面是修改后的SQL查询示例:
SELECT
COALESCE(persona.Name, CAST(AssPersona.ID AS VARCHAR)) AS Name,
AssPersona.food As Food
FROM
AssPersona
LEFT JOIN
persona ON persona.number = AssPersona.ID;
这里做了以下几点修改:
LEFT JOIN
确保了即使AssPersona
中的某些ID
在persona
表中没有匹配项,这些记录也会被包含。COALESCE
函数用于处理Name
列的显示。当persona.Name
存在时,显示其名称;否则,显示AssPersona.ID
的值(转换为字符串类型,以便与Name
列保持一致)。GROUP BY
子句,因为根据你的描述,似乎并不需要按任何特定列进行分组。如果你确实需要对结果进行分组,请明确分组的具体需求。执行这个查询后,你应该能够得到期望的结果,包括那些在persona
表中没有对应项的AssPersona
记录。