将两个 MySQL select 语句组合在一起
Combine two MySQL select statements together
我在 MySQL 8 中有一个小的 table,具有以下架构:
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`)
)
和一些数据
type_id=7 始终有一个 referenceId,其值等于某些 market_id。
我分两步得到结果
select json_extract(payload, '$.referenceId') from new_table where
type_id=7
returns 存储在有效载荷 (10000) 中的 market_id
然后是
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
以下是一些值:
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (1,'{\"Value\": 20}',2,10000);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (2,'{\"Value\": 20}',3,10001);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (3,'{\"Value\": 30}',4,10002);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (4,'{\"Value\": 120}',12 ,10003);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (5,'{\"Value\": 201}',2,10004);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (6,'{\"Value\": 20, \"referenceId\": 10000}',7,10005);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (7,'{\"Value\": 201}',3,10000);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (8,'{\"Value\": 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
有关交互式演示,请参阅数据库 Fiddle:https://www.db-fiddle.com/f/qHjmGSzwCgRSytW4wuhK1N/0
我在 MySQL 8 中有一个小的 table,具有以下架构:
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`)
)
和一些数据
type_id=7 始终有一个 referenceId,其值等于某些 market_id。
我分两步得到结果
select json_extract(payload, '$.referenceId') from new_table where type_id=7
returns 存储在有效载荷 (10000) 中的 market_id
然后是
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
以下是一些值:
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (1,'{\"Value\": 20}',2,10000);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (2,'{\"Value\": 20}',3,10001);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (3,'{\"Value\": 30}',4,10002);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (4,'{\"Value\": 120}',12 ,10003);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (5,'{\"Value\": 201}',2,10004);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (6,'{\"Value\": 20, \"referenceId\": 10000}',7,10005);
插入 (`id`,`payload`,`type_id`,`market_id`) VALUES (7,'{\"Value\": 201}',3,10000);
INSERT INTO
(id
,payload
,type_id
,market_id
) 值 (8,'{\"Value\": 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
有关交互式演示,请参阅数据库 Fiddle:https://www.db-fiddle.com/f/qHjmGSzwCgRSytW4wuhK1N/0