sql - 选择共享公共 id 的所有行
问题描述
嗨,这个需要帮助
所以我有下表示例:
id meta_key data_id meta_value
1 meta_1 1 example@email.com
2 meta_2 1 on
3 meta_id 1 11111
4 meta_1 2 example2@email.com
5 meta_2 2 on
6 meta_id 2 22222
7 meta_1 3 example3@gmail.com
8 meta_2 3 on
9 meta_id 3 111111
如何仅选择共享 11111 meta_value 的电子邮件
所以在这种情况下,我应该得到具有 example@email.com 和 example3@gmail.com 作为共享 11111 meta_id 值的行
帮助非常感谢和感谢
解决方案
大概,您希望meta_key
是'meta_id'
以及价值 是'1111'
。我建议使用exists
:
SELECT t.meta_value
FROM t
WHERE meta_key = 'meta_1' AND
EXISTS (SELECT 1
FROM t t2
WHERE t2.data_id = t.data_id AND
t2.meta_key = 'meta_id' AND
t2.meta_value = '1111'
);
特别是,这可以利用 和 上的(data_id, meta_key, meta_value)
索引(meta_key)
。
推荐阅读
- java - Spring 安全上下文是否在 REST/SOAP 调用中持续存在?
- jquery - Colorbox - 删除下一个和上一个按钮
- javascript - 收到推送通知时如何更改范围变量
- algorithm - 在 kotlin 中以更好的方式在 kotlin 中编写条件逻辑
- groovy - 将解析的 T&Z 时间戳转换为毫秒
- java - 获取 Java 中计划的非阻塞操作的结果
- python - 在 Pandas 中更快地计算相关矩阵
- vue.js - Cypress JS 自定义命令在 VUE CLI 中不起作用
- java - JavaFX:更改文本区域中的光标
- .net - ImageMetadata 更改属性已损坏