mysql - 如果子行匹配多个条件,SQL 获取父行

标签 mysql sql

我有一个属性表,其中包含:

parent_record_id(属性所属的记录),

property_type_id(属性的名称是什么)和

property_value 该属性。

现在我有一个名为 DATEproperty_type 和另一个名为 PRICEproperty_type。当我想搜索带有

的记录时

价格 = 50 美元或日期 = 2016-10-02

它按预期执行。然而,客户端需要能够检索具有 PRICE = 50$ 且已在 DATE = 2016-10-02 售出的记录。所以本质上,如果他们的两个 child 遇到任何一个,我必须得到记录

(property_type = PRICE AND property_value = 50$)或(property_type = DATE AND property_value = 2016-10-02)

我想最简单的方法是在 SQL 中执行该查询,然后对记录进行 GROUP 并检查属性的 SUM = 2。 (0)

我还发现,在穿越网络空间时,另一种杀死众所周知的巨龙的方法是两次加入属性表(在这个例子的上下文中)每次分配不同的别名,然后对这些别名执行两个查询表。 (1) 结果令我非常满意。

(0) 解决方案似乎很浪费,因为它会继续检查行是否满足条件,即使其中一个已被证明是错误的(并且由于每条记录可能有多达 20 个这样的属性/值对,因此表是会很大)。

更新:现在我已经考虑得更多了 (1) 可能会有同样的缺点并且还会检查同一行两次。

(1) 呢?有没有其他的可能性来解决这个问题。相比之下,这两种解决方案的性能如何?

(是的,我知道以这种方式对属性进行建模,尤其是在表上,无论如何都会在未来令人头疼,但 RDBMS 是我必须使用的,并且考虑到当前情况,这个解决方案似乎很灵活)

最佳答案

还有一些其他可能性(例如 WHERE 子句中的子查询),但我认为您提供的 (0) 是最优雅和语义正确的。

至于性能,您可以在需要时尝试调整它,而不是之前,因为“过早的优化是万恶之源”。 ;)

关于mysql - 如果子行匹配多个条件,SQL 获取父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661047/

相关文章:

mysql - 跨 2 个表分隔用户?

php - 如何使用php创建一个表头在左侧的表格?

mysql - 使用 ORDER BY 和 MATCH AGAINST 优化选择查询

java - 将Java连接到MySQL数据库

MySQL "source"命令覆盖表

c# - 无法将 NULL 值插入到定义为自动递增的 SQL 表列中

Python-MySQLdb : ValueError - unsupported format - although the use of the execute substitution

MySql 按月添加日期范围

mysql - SQL Order By 通过连接表

sql - 为一对多表实现查找或插入