【问题标题】:MySQL 5.7 and SELECT DISTINCT JSON attributesMySQL 5.7 和 SELECT DISTINCT JSON 属性
【发布时间】:2016-03-04 11:59:09
【问题描述】:

我在选择时需要帮助。如何获取具有唯一属性的行,例如我在 db 中有 2 个 json 字符串。

  1. {"name":["name1"]};
  2. {"name":["name2", "name1"]};
  3. {"name":["name3", "name4"]};
  4. {"name":["name3"]};

如果我只尝试SELECT DISTINCT data->"$.name",那么我会得到所有 2 个字符串,但我需要检查每个参数,如果之前有一些参数,则不要显示它。 有可能吗?

我只想得到 1 和 3 行,因为 2 和 4 包含我们已经拥有的名称(我不关心 name2 在我的情况下 name2 等效 name1)。

【问题讨论】:

  • 不确定我是否在关注。对于这个样本数据,您希望得到什么结果?
  • 只是第一个字符串,现在我得到所有 2,但如果每个字符串都是 {"name":["name1"]}; {"name":["name1"};它只返回 1 个字符串。我需要检查 $.name 中的每个参数都是唯一的
  • 不清楚您所说的“参数”是什么意思。整个名称列是参数,还是 JSON 数组中的每个字符串都是参数?换句话说,输出应该是 ["name1"], ["name2,"name1"] 还是应该是 ["name1"],["name2"]?或者您可能希望输出是字符串,而不是 JSON ? 我建议您编辑您的问题以显示您想要的实际输出。
  • 所以,我只想获取 json 字符串,如果第一个有 name1 - 我们接受它,但如果第二个字符串也有 name1 -> 从列表中排除它。

标签: mysql json


【解决方案1】:

我想将这个答案贡献给虚空。这将返回所有唯一的顶级 JSON 键;不幸的是,{'test':1}{'test':1, 'word':1} 将返回两条记录,testtest, word。这可能仍然适合某些人。

SELECT DISTINCT JSON_KEYS(tags) as name FROM items WHERE JSON_LENGTH(tags) >= 1

【讨论】:

    【解决方案2】:
    SELECT DISTINCT JSON_UNQUOTE(features->"$.name[0]") as name 
    FROM data WHERE JSON_LENGTH(features->"$.name") = 1
    

    所以,我只取了 attr 名称只有 1 项的结果。我们可以检查唯一性。这不是最好的解决方案,但我还没有另一个)

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2013-05-27
      • 2017-11-25
      相关资源
      最近更新 更多