开发者社区 问答 正文

SQL SERVER Select还选择在其他表中未配对的记录

表:

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

展开
收起
心有灵_夕 2019-12-10 17:37:33 525 分享 版权
阿里云 AI 助理回答

看起来你想要获取所有AssPersona表中的记录,同时如果这些记录在persona表中有对应的Number,则显示相应的Name。对于那些在persona表中没有匹配项的记录,你希望直接显示IDfood。为了实现这个需求,可以使用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;

这里做了以下几点修改:

  1. 使用LEFT JOIN确保了即使AssPersona中的某些IDpersona表中没有匹配项,这些记录也会被包含。
  2. COALESCE函数用于处理Name列的显示。当persona.Name存在时,显示其名称;否则,显示AssPersona.ID的值(转换为字符串类型,以便与Name列保持一致)。
  3. 移除了GROUP BY子句,因为根据你的描述,似乎并不需要按任何特定列进行分组。如果你确实需要对结果进行分组,请明确分组的具体需求。

执行这个查询后,你应该能够得到期望的结果,包括那些在persona表中没有对应项的AssPersona记录。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答