如果子行符合多个条件,则SQL获取父行

时间:2016-09-23 12:41:44

标签: mysql sql

我有一个属性表:

parent_record_id(记录属性所属),

property_type_id(属性的名称)和

该属性的

property_value

现在我有property_type名为DATE,另一名property_type名为PRICE。当我想搜索具有

的记录时

PRICE = 50$ OR DATE = 2016-10-02

它按预期执行。然而,客户端要求能够检索具有PRICE = 50$并且已在DATE = 2016-10-02上销售的记录。所以从本质上讲,如果他们的两个孩子遇到

,我必须得到记录

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

我想直接的方法是在SQL中执行该查询,然后GROUP记录并检查属性SUM是否= 2。 (0)

在遍历网络空间时,我还发现杀死众所周知的龙的另一种方法是两次加入属性表(在此示例的上下文中)每次分配不同的别名,然后对这些别名执行两个查询表。 (1)结果让我很高兴。

(0)解决方案看起来很浪费,因为它会继续检查行是否满足条件,即使其中一个已被证明是假的(并且因为每个记录最多可能有20个这些属性/值对,表是会变得很大。)

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

(1)怎么样?还有其他可能性来解决这个问题。另外,这些解决方案的性能如何?

(是的,我知道以这种方式对属性进行建模,特别是在表格上,无论如何都将成为一个令人头痛的问题,但是我必须使用RDBMS,并且考虑到当前的情况,这个解决方案似乎是灵活的)

1 个答案:

答案 0 :(得分:1)

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

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