【问题标题】:How to do a "SELECT DISTINCT" with two "INNER JOIN"?如何用两个“INNER JOIN”做一个“SELECT DISTINCT”?
【发布时间】:2021-04-23 21:31:22
【问题描述】:

我要做的是通过从不同的表进行一些内部连接来获取 GetAPersonByID。

表人

IDPerson Name LastName E-mail fk_ID_Skin
1 Example Explanation help@please.com 1
2 Example2 Explanation ineed@somebody.com 2

表皮

IDSkin Name
1 Normal
2 Weird

餐桌产品

IDProduct Name fk_skin_type Photo
1 Oil 1 PhotoOil
2 Water 2 PhotoWater
3 Cream 2 PhotoCream

我需要知道客户应该根据他们的皮肤类型使用哪些产品 但是......当我尝试做 InnerJoins 时(我为数据库中的西班牙语文本道歉):

SELECT
  people.IDPerson AS 'Id_person',
  people.name AS 'Name',
  people.lastname AS 'Lastname',
  people.email AS 'E-mail',
  skins.name AS 'Skin',
  products.name AS 'Product',
  products.photo AS 'Photo'
FROM
  ((people
      INNER JOIN skins
        ON people.fk_ID_skin = skins.IDSkin)
    INNER JOIN products
      ON people.fk_ID_skin = products.fk_skin_type)
WHERE IDPerson = c_id;

如何在不重复数据的情况下显示“X Person”? 我正在使用 MySQL 工作台

【问题讨论】:

  • 发布您的预期结果,MySQL Workbench 是一个工具.. 功能上的差异取决于 MySQL 版本;因此,要获得正确的版本,您可以在 MySQL Workbench 上运行 SELECT @@version,然后运行 ​​post the result into your question
  • 如何在不重复数据的情况下显示“X Person”? 在屏幕截图中,两个不同的Producto 匹配相同的“X Person”。想象一下,您只保存了一行 - 必须存储 Producto 的什么值,必须丢失什么值,为什么? PS。您的屏幕截图与您的 SQL 代码不匹配,列名不同...

标签: mysql mysql-workbench inner-join


【解决方案1】:

如何在不重复数据的情况下显示“X Person”?

听起来您是说您只想看到每人 1 行?假设是这种情况,那么我认为您要做的是 GROUP BY IDPerson。然后,您可以在 SELECT 语句中使用 GROUP_CONCAT 函数来生成一个逗号分隔的 Foto、Producto 等值列表。

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多