首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL键值模式,返回必须与多个键匹配的结果

MySQL键值模式,返回必须与多个键匹配的结果
EN

Stack Overflow用户
提问于 2018-08-16 21:56:33
回答 1查看 38关注 0票数 0

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

模式:

代码语言:javascript
复制
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;

数据:

代码语言:javascript
复制
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')

我提供的数据是简化的,我们的实际数据使用每个user_id的20-ish不同的唯一键

我试图实现的是通过user_id返回pet= dog和transport=car的所有记录,因此这两个键必须在每个用户的基础上具有给定值。

在传统的数据库模式中,这将是微不足道的,这种模式设计具有优势,所以如果可能的话,我不希望重构模式,但是我不确定如何处理这一点,我应该考虑内部选择/内部连接等吗?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 23:40:25

代码语言:javascript
复制
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';`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51878837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档