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、键、值)
上添加索引。