Mysql 如果子行匹配多个条件,则SQL获取父行
我有一个属性表,其中包含:Mysql 如果子行匹配多个条件,则SQL获取父行,mysql,sql,Mysql,Sql,我有一个属性表,其中包含: parent\u record\u id(属性所属的记录) 属性\类型\ id(属性的名称)和 属性\u该属性的值 现在我有一个属性类型,叫做日期,还有一个属性类型,叫做价格。当我要搜索具有 价格=50美元或日期=2016-10-02 它的性能与预期一样。然而,客户需要能够检索价格为50美元且在日期为2016年10月02日售出的记录。因此,本质上,如果他们的两个孩子中的任何一个相遇,我必须得到记录 (房产类型=价格和房产价值=50美元)或(房产类型=日期和房产价值=2
parent\u record\u id
(属性所属的记录)
属性\类型\ id
(属性的名称)和
属性\u该属性的值
现在我有一个属性类型
,叫做日期
,还有一个属性类型
,叫做价格
。当我要搜索具有
价格=50美元或日期=2016-10-02
它的性能与预期一样。然而,客户需要能够检索价格为50美元且在日期为2016年10月02日售出的记录。因此,本质上,如果他们的两个孩子中的任何一个相遇,我必须得到记录
(房产类型=价格和房产价值=50美元)或(房产类型=日期和房产价值=2016-10-02)
我想最简单的方法是在SQL中执行该查询,然后对记录进行分组,并检查属性的总和是否=2
。(0)
在穿越赛博空间时,我还发现另一种消灭传说中的龙的方法是两次连接属性表(在本例中),每次分配不同的别名,然后对这些别名表执行两次查询。(1) 结果在很大程度上使我高兴
(0)解决方案似乎是浪费,因为它会一直检查行是否满足条件,即使其中一行被证明是错误的(而且每个记录最多可能有20个这样的属性/值对,因此表将是巨大的)
更新:现在我已经考虑了更多(1)可能会有同样的缺点,也检查同一行两次
那(1)呢?有没有其他办法解决这个问题。这两种解决方案的性能比较如何
(是的,我知道以这种方式对属性进行建模,尤其是在表上,无论如何在将来都会是一件令人头痛的事情,但RDBMS是我必须使用的,而且这种解决方案在当前情况下似乎很灵活)还有一些其他的可能性(例如WHERE子句中的子查询)但在我看来,您提供的(0)是最优雅的,在语义上也是最正确的
至于性能,您可以在需要时尝试调整它,而不是在之前,因为“过早优化是万恶之源”。) 显示您当前的查询,或者您是否可以使用一些数据和您当前的查询准备sqlfiddel,并提供理想的预期结果,这将非常有助于更好地理解您的案例