2016-09-23 2 views
1

여러 조건에 일치하는 경우 부모 행을 얻을SQL은 자식 행이 내가 가지고있는 속성 테이블이

property_value 해당 속성.

이제는 property_typeDATE이라고하고 property_typePRICE이라고합니다. 나는 예상대로 수행하는

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는 현재 작업해야하는 것이므로이 솔루션은 현재의 상황에서 유연한 것으로 보입니다 상황)

+0

현재 쿼리를 표시하거나 일부 데이터와 현재 쿼리로 sqlfiddel을 준비하고 완벽한 결과를 얻을 수있는 예상 결과를 제공 할 수 있다면 귀하의 사례를 더 잘 이해하는 데 많은 도움이됩니다. – Alex

답변

1

다른 가능성 (예 : WHERE 절의 하위 쿼리)이 있지만 사용자가 (0)으로 제공 한 것이 가장 우아하고 의미상으로 정확합니다.

"조숙 한 최적화가 모든 악의 근원 인"이기 때문에 성능 향상을 위해 필요시 조정할 수 있습니다. ;)

관련 문제