2013-05-20 228 views
0

我有這個查詢。如果徽標爲空,我需要選擇行或者按鈕爲空或者vanitylogo爲空。這似乎是工作,但打印多行同一中期。如何解決這個問題?mysql查詢重複結果

SELECT fmm.mid, 
     fmm.name , 
     fmn.mnname, 
     fmm.button, 
     fmm.logo, 
     fmm.vanitylogo 
FROM X fmm , 
    Y fmn 
WHERE fmm.`button` = '' 
    OR fmm.`button` = 'NULL' 
    OR fmm.`button` = 'None' 
    OR fmm.`logo` = '' 
    OR fmm.`logo` = 'NULL' 
    OR fmm.`logo` = 'None' 
    OR fmm.`vanitylogo` = '' 
    OR fmm.`vanitylogo` = 'NULL' 
    OR fmm.`vanitylogo` IS NULL 
    AND fmm.mid=fmn.nid 
    AND fmm.status='active' 
    AND fmm.xyz_status='active' 
+1

在附註上,我建議你看看這個網頁http://flylib.com/books/en/2.823.1.194/1/代碼完成2,「變量名之間的心理距離的例子」 –

回答

3

你有兩個主要問題與您的查詢:

  1. 您沒有正確括號你OR條件
  2. 您沒有加入表之間的條件,導致「交叉聯接」

試試這個:

SELECT fmm.mid, 
     fmm.name , 
     fmn.mnname, 
     fmm.button, 
     fmm.logo, 
     fmm.vanitylogo 
FROM X fmm 
JOIN Y fmn ON fmn.some_column = X.some_column -- FIX THIS 
WHERE (fmm.`button` in ('', 'NULL', 'None') 
    OR fmm.`logo` IN ('', 'NULL', 'None') 
    OR fmm.`vanitylogo` IN ('', 'NULL') 
    OR fmm.`vanitylogo` IS NULL) 
    AND fmm.mid=fmn.nid 
    AND fmm.status='active' 
    AND fmm.xyz_status='active' 

您必須在「解決這個問題」補:用適當的列名

關於手術室行,我捆綁一些成IN()條件,並加括號了不少。

+0

但是這是選擇結果,其中vanitylogo爲NULL,並且不選擇其他列爲NULL的其他行 –

+0

我的意思是徽標和按鈕 –

0

您正在選擇'Y fmn'表。對於Y中的每一行,結果都會重複。您需要一種方法來彙總結果,可能還有一個group by。

SELECT fmm.mid, 
     fmm.name , 
     fmn.mnname, 
     fmm.button, 
     fmm.logo, 
     fmm.vanitylogo 
FROM X fmm , 
    Y fmn 
WHERE fmm.`button` = '' 
    OR fmm.`button` = 'NULL' 
    OR fmm.`button` = 'None' 
    OR fmm.`logo` = '' 
    OR fmm.`logo` = 'NULL' 
    OR fmm.`logo` = 'None' 
    OR fmm.`vanitylogo` = '' 
    OR fmm.`vanitylogo` = 'NULL' 
    OR fmm.`vanitylogo` IS NULL 
    AND fmm.mid=fmn.nid 
    AND fmm.status='active' 
    AND fmm.xyz_status='active' 
group by fmm.mid, 
     fmm.name , 
     fmn.mnname, 
     fmm.button, 
     fmm.logo, 
     fmm.vanitylogo