当前位置: 首页 > 知识库问答 >
问题:

Mysql-从多个表中选择而不产生重复数据[已关闭]

萧飞
2023-03-14

我有三个表格,我想从表格中选择,而不产生重复。

表格如下:

客户

id     |     name   |     lastName  
---------------------------------------
1      |    john    |      doe
2      |    helen   |      keller    

命令

userID列是引用John Doe的外键,因此John订购了3项。

id     |   userID   |     order 
---------------------------------------
1      |    1       |      pizza
2      |    1       |      pasta
3      |    1       |      lasagna    

客户校正

userID列是引用johndoe的外键,因此John留下了5条评论。

 id     |   userID  |     rating   |  comment
-------------------------------------------------
1      |    1       |      5/5     |  was good
2      |    1       |      5/5     |  excellent
3      |    1       |      4/5     |  great
4      |    1       |      4/5     |  great
5      |    1       |      4/5     |  great

我将如何从3个表中进行选择,从中可以得到如下所示的返回结果?

id     |     name   |     lastName    |   order      |   rating
-----------------------------------------------------------------
1      |    john    |      doe        |   pasta      |   5/5
       |            |                 |   pizza      |   5/5
       |            |                 |   lasagna    |   4/5
       |            |                 |              |   4/5
       |            |                 |              |   4/5

我尝试过加入这些表,但是由于John留下了5个评论,并且只订购了3次,所以id、name、lastName和订单列会被重复的数据填满。

谢谢!

共有3个答案

祖翰音
2023-03-14

我认为您需要向CustomerRating表添加orderID字段,否则无法将项目与其评级关联。

华星剑
2023-03-14

有一些方法可以丢弃重复的评分(选择DISTINCTUNIONGROUP BY),但不清楚用户是更新现有评分还是创建新评分。你想看到的是:最后的评级还是平均评级

另一方面,我会改变你的整个设置:

>

  • 订单表将包含order_idcustomer_id和其他订单相关的内容,如order_date

    产品表,将描述您的每道菜及其信息,如价格,描述等

    order_products表,其中包含字段order_idprduct_id

    如果用户对产品进行评级,那么您的评级表至少需要产品id客户id评级值。我还添加ratingDate,这样您可以通过Max(ratingDate)

  • 丁星火
    2023-03-14

    我没有任何MySQL的经验,但我假设它的工作原理类似于MSSQL。

    因此,您期望输出的格式是不可能的。您可以以逗号分隔的方式获取订单和评级列值

    这里有一个类似的问题可能会对你有所帮助

    包括基于链接的示例尝试这样的东西

    选择Customers.id、Customers.name、Customers.lastName、GROUP_CONCAT(Orders.order)ordereddishs、GROUP_CONCAT(CustomerRating.rating)ratings从。。。。。查询的其余部分…

     类似资料:
    • 我想从具有相同user_id的两个表中获取所有数据,但我不知道要使用什么类型的联接,我想确定查询的语法。 “日程”表:

    • 我试图从获取数据。总共有9个表格,我必须相应地从所有表格中显示产品列表。 我考虑过使用连接,并尝试了左连接,如下所示: 这里是主表,pid是从tbl2到tbl9的所有表的。 注意:这里我在所有表上使用了来避免长查询,但是在实际的数据库操作中,只提到特定的列来提高性能。 现在实际的问题是,我没有得到所有的记录从表使用左加入。只检索中对应的每个条目的最后一行。 我使用了GROUP BY来避免重复的左连

    • 我正在使用具有多重选择和分页功能的datatable,当我选择一行并转到另一个页面,然后返回到我所在的页面时,我选择的行将不再被选中。我使用的是primefaces 3.5、mojarra、jboss 7.1,我的bean是ViewScope。下面是我的代码: 型号:

    • 问题内容: 产生5行(5个数组),是一行中唯一的唯一字段。重复( 在这里 重复3次。 )我如何摆脱这些重复? 编辑: 我想要和所有为每个饮料。 问题答案: 您在这里所做的称为a (尽管您是隐式执行的,因为您是从多个表中选择的)。这意味着,如果您未在WHERE子句中放置任何条件,则您将拥有这些表的 所有组合 。仅根据您的条件,您才可以将联接限制为饮料ID匹配的行。 但是,如果有X张包含此特定Drin

    • 问题内容: 我需要编写一个选择查询,以从Spring数据存储库层的多个表中获取数据。我知道我们可以使用@Query编写自定义查询,但这仅从单个表中返回值吗? 问题答案: 您的Interface方法可以使用本机SQL从多个表中选择列,并且该方法将返回对象数组的列表: 列表中的每个项目都是对象数组,它是一行数据 您还可以创建自定义存储库实现: 如何向Spring Data JPA添加自定义方法