【问题标题】:SQL query needed to combine many-to-one values into single result需要将多对一值组合成单个结果的 SQL 查询
【发布时间】:2014-06-15 00:53:32
【问题描述】:

我有两个名为 Item 和 Property 的数据库表:

Item
--------
item_id
title

Property
--------
property_id
item_id
property_value

每个项目都可以与任意数量的属性条目相关联。

是否有一个 SQL/MySql 查询可以在同一行中返回 Item 数据及其对应的 Property 数据? (即我想要一个查询来返回这些表中的所有数据,格式为返回结果的每一行都包含特定项目的所有项目和相关属性数据)

这可能吗?

【问题讨论】:

  • 你到底想要什么表结构?
  • 您可能需要提供一些示例数据和所需的结果。

标签: mysql sql database one-to-many many-to-one


【解决方案1】:

如果您不介意结果在一列中,您可以执行以下操作:

SELECT i.item_id,
       group_concat(p.property_id, ':', p.property_value separator ';') as properties
FROM Item i INNER JOIN
     Property p
     ON i.item_id = p.item_id
GROUP BY i.item_id;

【讨论】:

    【解决方案2】:

    寻找这个?:

    SELECT *
    FROM Item i INNER JOIN Property p
    ON i.item_id = p.item_id
    

    这将从两个表中投影 item_id。如果要限制列,请从每个表中单独列出它们。

    【讨论】:

    • 我不这么认为。看来 OP 想要动态 PIVOT
    • 感谢您的快速回复,VBlades!不幸的是,我认为这对我不起作用......我希望给定项目的所有属性数据都在结果的同一行中返回。 (即,如果我有 3 个属性条目与同一个 Item 条目相关联,我认为上面的查询会为它返回 3 个单独的行,而不是将它们组合成一个)
    • 是的,对不起,我的错误,读错了。会考虑的。道歉。
    • @user1752396:我认为 PM 77-1 是正确的,通常这将是一个 PIVOT 解决方案。这里有一个解决方案,但看起来涉及:stackoverflow.com/questions/7674786/mysql-pivot-table。数据必须在列中吗?或者所有数据都由一个字符分隔的一个字段可以吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2015-04-04
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2018-07-15
    相关资源
    最近更新 更多