mysql - 有实体表和有属性的单独表,如何构建优雅的SQL查询

标签 mysql sql

MySQL数据库中有表

entity
----------
ID NAME
1  entity1
2  entity2
3  entity3

entity_props
----------
ENTITY_ID PROP_ID PROP_VALUE
1          23      abc
1          24      def
1          25      xyz

当我需要选择具有属性值 23="abc"、24="def"和 25="xyz"的所有实体时,我使用此类请求

SELECT ID 
FROM entity 
WHERE PROP_ID=23 AND PROP_VALUE="abc" AND ID IN 
    (SELECT ENTITY_ID FROM entity_props WHERE PROP_ID=24 AND PROP_VALUE="def" and ENTITY_ID IN
    (SELECT ENTITY_ID FROM entity_props WHERE PROP_ID=25 AND PROP_VALUE="xyz"))

但是当属性太多时,它看起来很糟糕。你能建议如何简化它吗?

提前致谢!

最佳答案

嗯。 . . group byhaving 怎么样?

select entity_id
from entity_props ep
where (prop_id, prop_value) in ((23, 'abc'), (24, 'def'), (25, 'xyz'))
group by entity_id
having count(distinct prop_id) = 3;

关于mysql - 有实体表和有属性的单独表,如何构建优雅的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49392994/

相关文章:

sql - 如何使用 SQL Server 获取我的案例中的日期?

mysql - 选择带有更新的语句

mysql - 对MySql数据库中的数据进行排序

mysql - 从 SQL Yog 连接到 MYSQL 服务器

mysql - 选择具有不同值的行

sql - 使用内联SQL更新语句

mysql - 更新具有引用同一表的内部查询的查询

SQL转储上传语法错误

mysql - Pchart - 从 MySQL 中检索数据

mysql - 从频繁更新的 mysql 表中检索行 block 中的数据