【问题标题】:Mysql JSON_EXTRACT ignore some fields when doing 'not matching' requestsMysql JSON_EXTRACT 在执行“不匹配”请求时忽略某些字段
【发布时间】:2019-01-18 03:21:08
【问题描述】:

我在对存储在 Mysql 数据库中的 JSON 数据执行一些选择 JSON_EXTRACT 请求时遇到了一些麻烦。

每一行没有完全相同的 JSON 数据结构。当我使用 JSON_EXTRACT 选择匹配条件的字段时,一切顺利。

问题在于尝试选择与条件不匹配的字段时。仅返回具有键的字段(当然,虽然不匹配数据)。

您会找到重现此行为的a fiddle here

我认为这是有意为之,但我想知道是否有一种糖变通方法可以在不添加其他条件的情况下导致小提琴的第四个请求结果(在实际情况下,请求是基于特定的 API 语法以编程方式生成并添加上下文条件会很痛苦)?

【问题讨论】:

  • 大概对于查询 #3,您想要返回除 id=1 之外的所有内容?
  • 您认为查询#2 和查询#3 的结果有何不同?它们本质上是一样的
  • @Nick 你是对的。我在写作时添加了第三个测试,并没有相应地更新我的问题。我的意思是第四个查询当然是返回整个字段。谢谢你的指点。
  • 那么您想要查询 4 ​​的结果是什么?其他查询的结果是您想要的吗?
  • 我正在寻找一种方法来获得第四个结果集,而无需在查询中添加额外的 OR 条件

标签: mysql json json-extract


【解决方案1】:

解决问题的一种方法是选择与表达式匹配的 id,然后在 INNOT IN 表达式中使用它们,具体取决于您是要检查匹配还是不匹配,例如

SELECT *
FROM `test`
WHERE id IN (SELECT id
             FROM `test` 
             WHERE data->>'$.test' = 'passed');

SELECT *
FROM `test`
WHERE id NOT IN (SELECT id
                 FROM `test` 
                 WHERE data->>'$.test' = 'passed');

查询中唯一的区别是添加了单词NOT 来否定匹配。

Demo

【讨论】:

  • 该死的。我什至没有想过使用子查询 Xo。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多