mysql - 将两个 MySQL select 语句组合在一起

标签 mysql database mysql-8.0

我在 MySQL 8 中有一个小表,其架构如下:

CREATE TABLE `new_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `payload` json NOT NULL,
  `type_id` int(11) NOT NULL,
  `market_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) 

和一些数据

enter image description here

type_id=7 的referenceId 值始终等于某个market_id。

我只需两步即可获得结果

select json_extract(payload, '$.referenceId') from new_table where type_id=7

返回存储在有效负载中的 market_ids (10000)

然后

select id from new_table where market_id=10000 and type_id=2

这最终给了我所有 type_id=2 的 id,并且 market_id 在其他记录中被引用。

我想一步完成此操作,而不是两步。我怎样才能做到这一点?我想要 type_id 2 的所有 market_id,其中 market_id 位于 json 负载中,其中 market_id 为 7

以下是一些值:

INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (1,'{\"Value\": 20}',2,10000); INSERT INTO (id,有效负载,type_id,market_id) VALUES (2,'{\“值”: 20}',3,10001); INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (3,'{\"Value\": 30}',4,10002); INSERT INTO (id,有效负载,type_id,market_id) VALUES (4,'{\“值”:120}',12,10003); INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (5,'{\"Value\": 201}',2,10004); INSERT INTO (id,有效负载,type_id,market_id) VALUES (6,'{\“值”:20,“引用ID”:10000}',7,10005); INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (7,'{\"Value\": 201}',3,10000); INSERT INTO (id,有效负载,type_id,market_id) VALUES (8,'{\"值\": 20,\"referenceId\": 10004}',7,10008);

最佳答案

I would like to do this in one and not two steps.

您可以使用子查询来做到这一点。

select
    id
from
    new_table
where 
    market_id = (
        select json_extract(payload, '$.referenceId')
        from   new_table
        where  type_id = 7
    )
    and type_id = 2

请参阅 DB Fiddle 的交互式演示:https://www.db-fiddle.com/f/qHjmGSzwCgRSytW4wuhK1N/0

关于mysql - 将两个 MySQL select 语句组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58508871/

相关文章:

php - 将数据插入表 - 主键约束

php - foreach 循环,在 foreach 循环中使用 sql 查询

mysql - 无需泄露密码即可远程访问 mysql DB

PHP + MySQL 多数据库网站到带前缀的单数据库网站。

json - MongoDB - 带有 group_by 的嵌套数组的总和

mysql 8.0.13 行大小太大 (> 8126)

php表单提交没有插入到数据库中

mysql - ColdFusion 数据库设置

mysql - 为什么 MEMBER OF() 或 JSON_CONTAINS() 不使用多值索引?

mysql-8.0 - 如何在创建用户后修复 Mysql 8.0 中的 ERROR 1726 (HY000) : Storage engine 'MyISAM' does not support system tables.