mysql键值架构,返回的结果必须匹配多个键

qij5mzcb  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(246)

我试图使用一个简单的键值innodb表来构造一个查询,该查询将返回所有适用的结果
架构:

CREATE TABLE `user_metadata` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `key` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `value` text COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_metadata_key_index` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

数据:

INSERT INTO
  `user_metadata` (
    `id`,
    `user_id`,
    `key`,
    `value`,
    `created_at`,
    `updated_at`
  )
VALUES
  (1, 1, 'nickname', 'bobby'),
  (2, 1, 'pet', 'dog'),
  (3, 1, 'transport', 'car'),
  (4, 2, 'nickname', 'andy'),
  (5, 2, 'pet', 'dog'),
  (6, 2, 'transport', 'car') (, 3, 'nickname', 'jonny'),
  (7, 3, 'nickname', 'jonno'),
  (8, 3, 'pet', 'cat'),
  (9, 3, 'transport', 'bike')

我提供的数据是简化的,我们的真实数据使用每个用户id 20个不同的唯一密钥
我试图实现的是按用户id返回pet=dog和transport=car的所有记录,因此每个用户的两个键都必须具有给定的值。
在传统的数据库模式中,这将是微不足道的,这种模式设计具有优势,因此如果可能的话,我不希望重新构造模式,但是我不确定如何处理这一点,我应该考虑内部选择/内部连接等吗?
任何帮助都将不胜感激。

tzxcd3kk

tzxcd3kk1#

SELECT *
FROM user_metadata
INNER JOIN user_metadata AS subQ
USING(user_id)
WHERE user_metadata.key = 'pet'
AND user_metadata.value = 'dog'
AND subQ.key = 'transport'
AND subQ.value = 'car';`

相关问题