【问题标题】:Duplicate column value in MYSQL queryMYSQL查询中的重复列值
【发布时间】:2020-09-08 18:48:56
【问题描述】:

我只有 mysql 的工作知识。通常它已经足够好了,但是尽管在线寻找可以理解的解决方案,但我仍然遇到了这个查询的问题。

我有三张桌子:

用户

user_id  
username

product_to_users

user_id (primary key)  
security_id (primary_key)

产品

security_id (primary_key)  
product_name  

我需要获取与每个产品名称相关联的用户名。 我开发了这个查询。

select username,product_name 
from users 
JOIN product_to_users ON users.user_id=product_to_users.user_id 
JOIN product ON product.security_id=product_to_users.security_id;

我尝试为每个表创建一个链接,效果很好,但我得到了

username      product_name   
bob           prod1   
bob           prod2

我需要消除左列中的重复项,因此我需要删除第二个 bob。

我的研究揭示了三件事:需要 LEFT JOIN,可能不需要连接三个表,我可能必须使用 IN 或 EXISTS。但是,我很难确定如何编写查询。有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你没有说清楚你想要什么,输出如何是输入的函数。当你清楚时,这将是一个常见问题解答。左连接适用于当您输入的行与您希望返回的连接不匹配的情况下,该行由具有 NULL 值的列扩展。要仅返回每列中相同的每一行作为输入,请使用 select distinct.. 在考虑发布之前,请阅读您的教科书和/或手册和谷歌任何错误消息或您的问题的许多清晰、简洁和精确的措辞/问题/目标,有&没有你的特定字符串/名称&站点:stackoverflow.com&标签;阅读许多答案。 How to Ask
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 停止尝试编写您的总体目标并从给定的代码中解释您的期望以及原因。

标签: mysql sql join duplicates


【解决方案1】:

好吧,您可以将同一 username 的所有产品放在同一行聚合:

select u.username, group_concat(product_name) product_names
from users u 
inner join product_to_users ptu on ptu.user_id = u.user_id 
inner join product p on p.security_id = ptu.security_id
group by u.user_id, u.username

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 2018-08-12
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多