2011-04-01 3 views
2

나는 이것이 간단하지만 내 뇌는 오늘 작동하지 않는다고 확신합니다! 피벗 테이블 - - products 및 다른 테이블 attributes 사이의 참조가,이 테이블이 products_to_attributes하고 pta_aid (ID 속성)과 pta_pid (제품을 포함MySQL이 피벗 질문에 합류합니다.

나는 내가 다른 테이블을 가지고 할 수는 그냥 p_id을 포함한다고 가정 해 봅시다, 테이블 products이 ID)

희망이 (잘못된) 쿼리 내가 그것을 설명 할 수있는 것보다 내가 더 잘 수행 할 작업을 표시합니다 :

SELECT `p_id` FROM `products` 
LEFT JOIN `products_to_attributes` ON (`pta_pid` = `p_id`) 
WHERE ((`pta_aid` = '1' OR `pta_aid` = '2') AND(`pta_aid` = '3')) 

내가 함께 어디 속성 그룹에 수 있어야합니다

SELECT p_id FROM products PR 
WHERE EXISTS (SELECT p_id FROM products_to_attributes WHERE (pta_aid = 1 OR pta_aid=2) AND pta_pid=PR.p_id) 
AND EXISTS (SELECT p_id FROM products_to_attributes WHERE pta_aid = 3 AND pta_pid=PR.p_id) 
+2

동일한 행의 같은 필드에 두 개의 값을 가질 수 없습니다. –

답변

2

이 있어야합니다 어떤 필드가 어떤 테이블에서 왔는지. 그러나 필드가 1과 3 모두 연속적으로 될 수있는 방법은 무엇입니까? where 절에 논리적 인 문제가 있습니다.

+0

내 데이터 세트에 대해 테스트하는 것입니다. – robjmills

0
SELECT p.`p_id` FROM `products` p 
LEFT JOIN `products_to_attributes` pta ON (p.`p_id` = pta.`pta_pid`) 

이름 테이블과 지정 제품은 거의이 두 조항이 존재 가져야 속성 1 또는 속성이 있고 내가 제대로 필요성을 이해하면 속성 3.

+0

논리 문제는 고맙지 만 내 코드는 본질적으로 문제를 설명하는 의사 코드였습니다. – robjmills