2016-09-23 80 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)是最優雅和語義正確的。

至於性能,您可以嘗試在需要時調整它,而不是之前,因爲「過早優化是所有邪惡的根源」。 ;)