Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果子行匹配多个条件,则SQL获取父行_Mysql_Sql - Fatal编程技术网

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,并提供理想的预期结果,这将非常有助于更好地理解您的案例