Sql 在1:N关系表中不显示重复数据的查询

Sql 在1:N关系表中不显示重复数据的查询,sql,oracle,Sql,Oracle,例如,有表A和表B。A和B有1:N的关系 a有多个b,如果左连接,则创建的b数量与a中的b数量相同。但我只想看一个a 我这样写了这个查询。但是,创建的mem_名称仍然与b一样多 select DISTINCT a.mem_name, b.* from member a left join product b on a.mem_name = b.username ; 我怎样才能解决这个问题 我当前的结果如下所示: a、 mem_名称 b、 可乐 b、 可乐 成员1

例如,有表A和表B。A和B有1:N的关系

a有多个b,如果左连接,则创建的b数量与a中的b数量相同。但我只想看一个a

我这样写了这个查询。但是,创建的mem_名称仍然与b一样多

    select DISTINCT a.mem_name, b.*
    from member a left join product b
    on a.mem_name = b.username
    ;
我怎样才能解决这个问题

我当前的结果如下所示:

a、 mem_名称 b、 可乐 b、 可乐 成员1 10 20 成员1 30 40 成员2 50 60 成员2 70 80
因为你们不知道区分的原理。 b、 *提出问题

你需要替换为group by,比如

选择a.mem_名称,b* 从成员a向左加入产品b 在a.mem_name=b.username上 按a.mem_名称分组
注意:此sql语句不能在SqlServer上执行,但它是有效的,可以在MySQL上执行。将显示与a关联的表b的随机行。

听起来您将SQL与报表编写工具混淆了。您的查询要求的数据集始终具有a.mem_名称,并且对于满足a.mem_name=b.username的a和b的所有组合,具有b中的所有元素。无论您如何询问SQL,有时都不能包含“表a”数据,有时则不能


如何选择显示此结果集是另一个问题。有一些报告编写工具允许在正确订购时对数据进行这种空白处理。

a有多个b。您希望每行显示一行。那么,您希望在该行中显示其b中的哪一个?或者,如果您正在谈论显示的事情,即您希望显示所有a/b行,但在结果中第一次出现a.mem_名称后将其隐藏,并用NULL重新绘制,这是您不应该在SQL中执行的操作,而应该在您的应用程序或网站中执行。不过,这是有可能的,因为存在滞后。您的请求将变得清晰,您是否添加了一些示例数据和预期结果。DISTINCT将删除重复的行,但不太可能有任何重复的行,因为所有值都相同。您可以查看您添加的照片吗?选择的结果。正如你从照片中看到的,如果你把两个b放在a中,就会产生两个a和两个b。我想在屏幕上显示的是a的mem_name列和b的所有列。正如您所回答的,即使使用distinct,也不会删除重复项,因为​​b列中的不是所有的重复项。在这种情况下,我不能用sql按我想要的方式处理数据吗?这看起来不像是查询结果。查询结果有列,而您只显示行。如前所述,应该在应用程序中关注显示内容,而不是在SQL中。而且您不知道分组原则。a有多个b。那么,您认为您的查询将显示其b中的哪一个?您的查询无效。此sql在SqlServer中无效,但在MySQL中有效,您在MySQL中运行过吗?它在MySQL中实际上无效。MySQL应该检测每个a中有多个可能的b。取决于是否设置了ONLY_FULL_GROUP_BY mode以及MySQL的工作情况,它将拒绝此查询或在所有b列上静默应用任何_值,即给出任意结果。通常认为MySQL会因此漏掉无效查询,这是一种缺陷。没有经验的用户可能会认为他们的查询是有效的,而实际上并非如此。你的不是。我建议你切换到MySQL 8,只设置完整的组来获得最佳帮助。对不起,你是对的,我应该建议初学者使用标准SQL。哦,谢谢。我们也来搜索一下。