У меня есть небольшая таблица в 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`)
)
и некоторыми данными
type_id = 7 всегда имеет referenceId значение, равное некоторому market_id.
Я получаю свои результаты в два этапа
select json_extract (payload, '$ .referenceId')из new_table где type_id = 7
, который возвращает market_ids, которые хранятся в полезной нагрузке (10000)
и после этого
выберите идентификатор из new_tableгде market_id = 10000 и type_id = 2
, что в итоге дает мне все идентификаторы, которые имеют type_id = 2, а market_id упоминается в какой-то другой записи.
Я бы хотел сделать это за один, а не за два шага. Как я могу это сделать? Мне нужны все market_id типа type_id 2, где market_id находится в полезной нагрузке json, где market_id равно 7
. Вот несколько значений:
INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (1,'{\"Value\": 20}',2,10000);
INSERT INTO
(id
, payload
, type_id
, market_id
) VALUES (2, '{\ "Value \": 20}', 310001);INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (3,'{\"Value\": 30}',4,10002);
INSERT INTO
(id
, payload
, type_id
, market_id
) VALUES (4, '{\ "Value \": 120}', 12,10003);INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (5,'{\"Value\": 201}',2,10004);
INSERT INTO
(id
, payload
, type_id
, market_id
) VALUES (6, '{\ "Value \": 20, \ "referenceId \": 10000}', 7,10005);INSERT INTO (`id`,`payload`,`type_id`,`market_id`) VALUES (7,'{\"Value\": 201}',3,10000);
INSERT INTO
(id
, payload
, type_id
, market_id
) VALUES (8, '{\ "Value \": 20, \ "referenceId \": 10004}', 7,10008);