2010-02-08 179 views
4

我試圖讓所有用戶在profile_values中沒有爲fid = 13設置值或根本沒有值。我猜這有一個簡單的解決方案,但我只是沒有看到它。任何幫助或正確的方向點非常感謝。MySQL查詢 - 幫助選擇

(在表用戶和profile_values從Drupal的都是。)

簡體值:

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 

我的問題是user2的那些不應該在那裏,因爲它具有fid值= 13


感謝所有令人難以置信的快速和合格的答案,歡呼!

回答

1

你想要添加一個AND子句: AND u.uid NOT IN(從profile_values where fid = 13中選擇uid)bad_uids

+0

這不起作用。看看我和安東尼的討論 – zerkms 2010-02-08 23:44:11

+0

實際上,這似乎與OR(pv.fid = 13 AND pv.value ='')結合起來......除非我忽略了某些東西 – Borgenk 2010-02-08 23:53:38

+0

@Borgenk:爲什麼不是我的? ;-)你有沒有嘗試看看這個提議解釋? ;-) – zerkms 2010-02-09 03:10:30

0

也許嘗試

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

你的條件有點不清楚:

得到沒有在profile_values爲FID = 13或沒有值設置爲一個數值,所有用戶

這意味着「讓所有用戶與FID等於13以外的東西,並在profile_values中有一些值「?

+0

,這將選擇用戶2 - 12,因爲12 = 13和12 IS NOT NULL – zerkms 2010-02-08 23:25:34

+0

難道他們不想user2的? – Anthony 2010-02-08 23:36:39

+0

對不起,我正在看問題的錯誤部分。爲什麼user2顯示兩次?沒有唯一的ID本身就是一個問題,對嗎? – Anthony 2010-02-08 23:39:52

1

WHERE NOT EXISTS(SELECT 1 FROM profile_values光伏WHERE pv.uid = u.uid AND pv.fid = 13)

這其實是一個緩慢的解決方案,但我無法實現任何其他方式

0

您只需要配置文件中的值不爲空且fid不是13,對不對?這意味着如果兩者都是真的,或者如果兩者都是真的,則跳過這些記錄。所以不要將它們組合在一起並使用OR。使用和:

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

OR

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 2010-02-08 23:33:24