나는 제품, 속성 및 product_properties 세 테이블이 있습니다.MySQL 쿼리 여러 조건 및 다중 테이블
가 lens_family에 의해 카메라 1 (일치 카메라와 렌즈에 대한 모든 렌즈를 찾아, 여기에 '표준'입니다 : 여기
products --------------------------------------------- | id | name | description | price | --------------------------------------------- | 1 | Camera | Color Camera | 100 | | 2 | Lens 1 | Camera Lens 1 | 20 | | 3 | Lens 2 | Camera Lens 2 | 30 | --------------------------------------------- properties ------------------------------------------ | id | name | display | ------------------------------------------ | 1 | lens_mount | Lens Mount | | 2 | image_circle | Image Circle | | 3 | focal_length | Focal Length | | 4 | lens_family | Lens Family | ------------------------------------------ product_properties ------------------------------------------------ | id | value | product_id | property_id | ------------------------------------------------ | 1 | F-Mount | 2 | 1 | | 2 | C-Mount | 3 | 1 | | 3 | 42.01 mm | 2 | 2 | | 4 | 13.00 mm | 3 | 2 | | 5 | 10.00 | 2 | 3 | | 6 | 12.00 | 3 | 3 | | 7 | Standard | 1 | 4 | | 8 | Standard | 2 | 4 | | 9 | Standard | 3 | 4 | ------------------------------------------------
내 출력 조건 : 테이블 구조와 값의 일부를 아래에서 언급)이 대한 lens_mount = 'F 마운트'와 image_circle> = 40mm 및 focal_length> 5
나는 다음과 같은 시도 쿼리이있는 :
SELECT * FROM products
INNER JOIN product_properties ON products.id = product_properties.product_id
INNER JOIN properties ON properties.id = product_properties.property_id
WHERE (product_properties.value = 'Standard')
AND (properties.name = 'lens_mount' AND product_properties.value = 'F-Mount')
AND (properties.name = 'image_circle' AND product_properties.value >= ABS('40 mm'))
AND (properties.name = 'focal_length' AND product_properties.value >= 5)
을
그러나 조건이 하나만있는 경우이 쿼리는 올바른 결과를 제공합니다. 모든 조건에서 어떤 가치도주지 않습니다. OR 대신 AND 대신 AND로 시도했지만 올바른 결과를 얻지는 못했습니다.
아무에게도 이것을 할 수 없습니까? 미리 감사드립니다.
나는이 솔루션을 좋아한다. 'Standard'를 값으로 가질 수있는 다른 프로퍼티가있는 경우에는 아마도'properties.name = 'lens_family'AND'를 처음으로'HAVING' 절의 기준 ('product_properties.value = 'Standard'')에 추가해야합니다. – Tom
@Tom. . . 아주 좋은 점. 나는 그 수정을했다. –
고든 & 톰 감사합니다.이 솔루션은 완벽하게 작동했습니다! – Lalu