Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当我按一个元选择时,如何获取记录中的所有元_Mysql_Sql - Fatal编程技术网

Mysql 当我按一个元选择时,如何获取记录中的所有元

Mysql 当我按一个元选择时,如何获取记录中的所有元,mysql,sql,Mysql,Sql,我有一个用户,这个用户的属性存储在一个元表中。我想根据一个元选择用户,然后列出他们所有的元 像这样 SELECT * FROM users u LEFT JOIN metas m ON u.id = m.user_id WHERE m.key = 'eye_color' AND m.value = 'blue' 问题是,这样的查询不会返回连接到用户的其他元。一种方法使用存在: SELECT * FROM users u LEFT JOIN metas m ON u.i

我有一个用户,这个用户的属性存储在一个元表中。我想根据一个元选择用户,然后列出他们所有的元 像这样

SELECT * FROM users u 
LEFT JOIN metas m ON u.id = m.user_id 
WHERE m.key = 'eye_color' 
AND m.value = 'blue'

问题是,这样的查询不会返回连接到用户的其他元。

一种方法使用
存在

SELECT *
FROM users u LEFT JOIN
     metas m
     ON u.id = m.user_id 
WHERE EXISTS (SELECT 1
              FROM metas m2
              WHERE m2.user_id = m.user_id AND
                    m2.key = 'eye_color' AND
                    m2.value = 'blue'
             );

一种方法使用
存在

SELECT *
FROM users u LEFT JOIN
     metas m
     ON u.id = m.user_id 
WHERE EXISTS (SELECT 1
              FROM metas m2
              WHERE m2.user_id = m.user_id AND
                    m2.key = 'eye_color' AND
                    m2.value = 'blue'
             );
缓慢但有效:

SELECT u.*,m.* FROM users u, 
LEFT JOIN metas m ON u.id = m.user_id 
WHERE u.id = (select m.user_id FROM m where m.key = 'eye_color' 
AND m.value = 'blue');
缓慢但有效:

SELECT u.*,m.* FROM users u, 
LEFT JOIN metas m ON u.id = m.user_id 
WHERE u.id = (select m.user_id FROM m where m.key = 'eye_color' 
AND m.value = 'blue');

这是一个问题的解决方案,唯一的问题是它需要很长的时间来执行。是否有可能以某种方式加速此查询?@Envex。在
元(user\u id,key,value)
上添加一个索引。这是一个解决问题的方法,唯一的问题是执行需要很长时间。是否有可能以某种方式加速此查询?@Envex。在
元(用户id、键、值)
上添加索引。