在MySQL中根据JSON数组元素的值检索它们

在MySQL中根据JSON数组元素的值检索它们,mysql,json,Mysql,Json,我在MySQL中存储了一个json对象,如下所示: {"PhysicalAddresses": { "Entry": [ {"Key": "Home", "City": "City1", "State": "ST", "Street": "Some old street", "PostalCode": "00000", "CountryOrRegion": null}, {"Key": "Business", "City": "City2", "State": "ST", "Street": "

我在MySQL中存储了一个json对象,如下所示:

{"PhysicalAddresses": {
"Entry": [
{"Key": "Home", "City": "City1", "State": "ST", "Street": "Some old street", "PostalCode": "00000", "CountryOrRegion": null},
{"Key": "Business", "City": "City2", "State": "ST", "Street": "A much nicer street", "PostalCode": "00000", "CountryOrRegion": null}
]}}
我想知道公司的地址:大概是

json_extract(column,"$.PhysicalAddresses.Entry[*](where Key=Business)")
我可以在“where Key=Business”中输入什么来实现这一点,或者说没有办法以这种方式在MySQL中搜索JSON

感谢

允许您在路径中搜索值或子文档,但它没有任何语法用于测试在给定路径中找到的值

在这种情况下,不使用JSON将是更好的方法。将每个条目存储在单独表的一行中,并将条目的字段作为独立列存储。那么查询就简单多了:

SELECT * FROM PhysicalAddresses WHERE `Key` = 'Business'
讽刺的是,这么多人说他们使用JSON来实现灵活性。在允许插入各种数据格式方面,它确实为您提供了灵活性,但在随后查询数据的方式上,您牺牲了灵活性

允许您在路径中搜索值或子文档,但它没有任何语法来测试在给定路径中找到的值

在这种情况下,不使用JSON将是更好的方法。将每个条目存储在单独表的一行中,并将条目的字段作为独立列存储。那么查询就简单多了:

SELECT * FROM PhysicalAddresses WHERE `Key` = 'Business'

讽刺的是,这么多人说他们使用JSON来实现灵活性。在允许插入各种数据格式方面,它确实为您提供了灵活性,但在随后查询数据的方式上,您牺牲了灵活性

您可以使用从表中选择JSON_EXTRACT(列“$.PhysicalAddresses.Entry[1].Key”)来访问所需的数组;但这取决于“业务”始终位于阵列的第二位


我建议使用从表中选择JSON_提取(列“$.PhysicalAddresses.Entry[*].Key”)将返回[“Home”,“Business”],然后在应用程序中解析或使用JSON\u CONTAINS()

您可以使用从表中选择JSON\u提取(列“$.PhysicalAddresses.Entry[1].Key”)访问所需的数组;但这取决于“业务”始终位于阵列的第二位

我建议使用从表中选择JSON_提取(列“$.PhysicalAddresses.Entry[*].Key”)它将返回[“Home”,“Business”],然后在应用程序中解析或使用JSON\u CONTAINS()