2010-02-08 4 views
4

필자가 시도하는 것은 fid = 13 또는 모든 값을 profile_values에 설정하지 않은 모든 사용자를 얻는 것입니다. 나는 이것이 쉬운 해결책을 가지고 있다고 생각하지만, 나는 그것을 보지 못한다. 어떤 도움이나 옳은 방향의 요점은 크게 감사드립니다.MySQL 쿼리 - 선택 도움말

(표 사용자와 profile_values ​​모두 드루팔에서입니다.)

간체 값 :

uid name fid  value 
1 user1 1  foo 
1 user1 2  foo 
2 user2 12  
2 user2 13  1265662514 
3 user3 NULL NULL 
4 user4 NULL NULL 

나는 노력했다 :

SELECT u.uid, u.name, pv.fid, pv.value 
FROM users u 
LEFT JOIN profile_values pv ON pv.uid = u.uid 
WHERE u.status != 0 
AND (pv.fid != 13 OR pv.fid IS NULL) 
GROUP BY u.uid 

uid  name  fid  value 
1  user1  1  foo 
2  user2  12  foo 
3  user3  NULL NULL 
4  user4  NULL NULL 

내 문제는 사용자 2 인 안 fid = 13에 값이 있기 때문에 거기에있어.


신뢰할 수있는 빠르고 신뢰할 수있는 답변 주셔서 감사합니다.

답변

1

을 실현할 수없는 경우, AND 절을 추가하고 싶습니다 : AND u.uid NOT (profile_values의 uid를 bad_uids로 선택하십시오)

+0

이것은 작동하지 않습니다. 아래의 내 앤서니 토론에 대해 살펴보십시오 – zerkms

+0

사실, 이것은 OR (pv.fid = 13 AND pv.value = '')와 결합하여 작동하는 것 같습니다 ... 내가 뭔가를 간과하지 않는 한 – Borgenk

+0

@Borgenk : 왜 내 것이 아닌가요? ;-)이 제안서를 살펴 보았습니까? ;-) – zerkms

0

어쩌면

AND (pv.fid != 13 OR pv.value IS NOT NULL) 

시도?

귀하의 조건은 약간 불분명 :

이 모든 사용자를 얻을 수 "를 의미 profile_values에 전혀 FID = 13 값 없음 설정 값이없는 모든 사용자를 얻을 fid는 13 이외의 값이고 profile_values의 값은 무엇입니까? "

+0

이것은 사용자 2를 선택합니다 - 12 = 13 (12)가 NULL되지 않기 때문에 12 – zerkms

+0

그들은 사용자 2를 싶지 않아? – Anthony

+0

오, 죄송합니다. 질문의 잘못된 부분을보고있었습니다. user2가 두 번 표시되는 이유는 무엇입니까? 고유 한 ID를 갖고 있지 않으면 그 자체로 문제가 발생합니다. 맞습니까? – Anthony

1

WHERE NOT (profile_values의 태양 광 발전에서 1을 SELECT WHERE pv.uid = u.uid 및 pv.fid = 13) EXISTS

이 실제로 느린 솔루션입니다하지만 난 다른 방법을

0

값이 비어 있지 않고 fid가 13이 아닌 프로필 만 원하십니까? 두 레코드가 모두 true이거나 둘 중 하나라도 해당되면 해당 레코드를 건너 뜁니다. 따라서 그룹화하지 말고 OR을 사용하십시오. 사용하고!

WHERE 
u.status != 0 
AND 
pv.fid != 13 
AND 
pv.fid IS NOT NULL 

또는

WHERE 
u.status != 0 
AND 
pv.fid IS NOT (13 OR NULL) 
+0

http : // stackoverflow.com/questions/2225622/mysql-query-help-with-selection/2225646 # 2225646 - 내 의견을보세요. – zerkms