1 haidii 2020-04-28 16:44:40 +08:00 可以使用 elasticsearch 、或者 mongoDB 来做。 关系型数据库的话,最好这些信息放到一张表里面, 否则没有好的办法。 |
![]() | 2 U7Q5tLAex2FI0o0g 2020-04-28 16:48:38 +08:00 没细看,感觉你这里的 OR 会有问题 |
![]() | 4 U7Q5tLAex2FI0o0g 2020-04-28 17:12:52 +08:00 @IMFFA #3 总感觉没法同时满足 salary> 5000 和 address=‘广东’? |
![]() | 5 IMFFA OP @littleylv 啊啊,太低级了,居然会犯这种错( ̄ω ̄;),我已经给逻辑绕晕了,感谢指出。那现在这个也不能用了 o()o |
![]() | 6 asAnotherJack 2020-04-28 17:46:55 +08:00 关于 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 |
![]() | 7 xuanbg 2020-04-28 19:26:05 +08:00 直接两表 join 不就好了吗? |
![]() | 8 xuanbg 2020-04-28 19:35:46 +08:00 |
9 xizismile 2020-04-28 19:39:37 +08:00 via Android 感觉这张扩展属性表没有必要,趁早把一个人的多条数据合并成一条数据,要不然后续的查询需求搞死你 |
10 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 = '广东') |