目前的写法是 SELECT * FROM user WHERE age> 20 AND gender = ‘男’ AND user_id IN ( SELECT user_id FROM user_info WHERE (`key` ='salary' AND value > 5000) OR (`key` ='address' AND value = ‘广东’) GROUP BY user_id ) 但是用 IN 查询太慢了
关于 2 楼说的问题,用下边这种方式是不是可以解决,子查询改成 SELECT user_id FROM user_info GROUP BY user_id HAVING COUNT(IF( `key` ='salary' AND value > 5000 , 1, null)) > 0 AND COUNT(IF( `key` ='address' AND value = ‘广东’, 1, null)) > 0
另外这种方式可行的话,是不是可以两个表 join 然后 group by XXX having XXXX
xuanbg
2020-04-28 19:26:05 +08:00
直接两表 join 不就好了吗?
xuanbg
2020-04-28 19:35:46 +08:00
如果用有包含在 info 表的条件,就 join 一次 info 表,如果是楼主说的情况,就这样写:select u.* from uesr u join user_info s on s.user_id = u.id and s.key = 'salary' and s.value > 5000 join user_info a on a.user_id = u.id and a.key = 'address' and a.value = '广东';
xizismile
2020-04-28 19:39:37 +08:00
感觉这张扩展属性表没有必要,趁早把一个人的多条数据合并成一条数据,要不然后续的查询需求搞死你
lumious
2020-04-29 10:06:15 +08:00
用 exists 条件查询
SELECT * FROM USER WHERE AGE > 20 AND GENDER = '男' AND EXISTS (SELECT '' FROM USER_INFO WHERE USER.USER_ID = USER_INFO.USER_ID AND KEY = 'salary' AND VALUE > 5000 UNION ALL SELECT '' FROM USER_INFO WHERE USER.USER_ID = USER_INFO.USER_ID AND KEY = 'address' AND VALUE = '广东')
第 1 页 / 共 1 页
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。