2010-05-17 4 views
0

이 SQL에는 어떤 문제가 있습니까? 결과를 반환해야하지만 아무 것도 반환하지 않습니다.MySQL 가입 문제

SELECT `pid` 
    FROM `products` 
    LEFT JOIN `prods_to_features` 
    ON (`ptf_pid` = `pid`) 
WHERE ( `ptf_id` = '66' 
     OR `ptf_id` = '67' 
     ) 
    AND (`ptf_id` = '76') 

왼쪽 조인에 사용 된 테이블에 대해 두 번째 where 절을 사용할 수 있습니까?

+2

이 발생하는 문제가 모두 있습니다 경우 제품의 단 하나의 사본이 경우에 반환 보장하는 것입니다 이렇게 기본으로 시작하여 조각이 나올 때까지 추가하는 것이 좋습니다. 예를 들어, 전체 where 절을 가져옴으로써 우리의 컴퓨터 생성에 대해 합치기가 올바르게 작동한다는 것은 분명합니다. –

답변

4

다른 사람들이 말했듯이 WHERE 절은 의미가 없습니다.

나는 당신이 말하고자하는 것은 기능이있는 제품을 원한다는 것을 추측 할 것입니다. 76과 66 또는 67 기능이 있습니다. 당신이 필요합니다 두 사람은 그 조인 :

SELECT DISTINCT products.pid 
FROM products 
JOIN prods_to_features AS ptf1 ON ptf1.ptf_pid=products.pid 
JOIN prods_to_features AS ptf2 ON ptf2.ptf_pid=products.pid 
WHERE ptf1.ptf_id='76' 
AND ptf2.ptf_id IN ('66', '67') 

별개의은 제품은 66와 67

+0

의 "증명"이라는 가치있는 페이지가 있습니다. 이 doesnt 일 :( – robjmills

+2

나의 실수, 그것은 실제로한다! – robjmills

+3

OP 마음을 읽는 것을 위해 +1. –

7

WHERE 절을보십시오.

동시에 값을 (66 OR 67) AND 76으로 설정할 수 없습니다. 모든 행은 표현식에 대해 false를 리턴하므로 행이 리턴되지 않습니다.

5

문제는 가입과 관련이 없습니다.

당신은, 음, 가능성은

(`ptf_id` = '66' AND `ptf_id` = '76') 
OR (`ptf_id` = '67' AND `ptf_id` = '76') 
ptf_id = 66 = 76을 의미

또는 ptf_id = 67 = 76과 동일

(`ptf_id` = '66' OR `ptf_id` = '67') AND (`ptf_id` = '76') 

확인합니다.

+2

. 양자 컴퓨팅으로 가능할 수도 있습니다;) – knittl

+0

...하지만 1 = 2 –

2

문제는 prods_to_features에서 ptf_id (Where 절에 AND)의 두 가지 값이있는 레코드를 반환하도록 요청하는 것입니다.

Where 절에 ptf_id 중 하나 또는 두 개에 대해 pid을 의미 할 수도 있습니다. 그것은 단지 당신이하려는 일에 달려 있습니다.

2

부울 논리에 결함이 있습니다.

(ptf_id = 66 또는 67)이 작동하지 않을 것이다 (ptf_id = 76)

.