2016-09-23 59 views
1

我有了一个属性表:SQL获取父行,如果子行匹配多个条件

parent_record_id(物业所属的记录),

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

property_value该属性。

现在我有一个叫做DATEproperty_type和另一个叫做PRICEproperty_type。当我想以搜索有

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)的情况如何(012)?有没有其他的可能性来解决这个问题。同样,这些解决方案的性能如何呢?

(是的,我知道以这种方式建模属性,尤其是在表格上,将来会令人头痛,但RDBMS是我必须使用的,并且此解决方案似乎灵活enuf给定当前情况)

+0

显示您的当前查询,或者如果您可以准备sqlfiddel与一些数据和您当前的查询,并只是预期的结果,这将是完美的,并帮助很多,以更好地理解你的情况 – Alex

回答

1

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

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