首页 > 解决方案 > 选择共享公共 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 值的行

帮助非常感谢和感谢

标签: sqldatabase

解决方案


大概,您希望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)


推荐阅读