mysql查询重复结果

时间:2013-05-20 09:31:41

标签: mysql sql

我有这个查询。如果logo为空或者按钮为空或者vanitylogo为空,我需要选择行。这似乎有效,但打印多行为同一个mid。如何解决这个问题?

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'

2 个答案:

答案 0 :(得分:3)

您的查询遇到两个主要问题:

  1. 您未正确将OR条件
  2. 括起来
  3. 表之间没有连接条件,导致“交叉连接”
  4. 试试这个:

    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'
    

    您必须填写“FIX THIS”:具有相应列名称的行

    关于OR,我将一些内容捆绑到IN()状态,然后将这些内容括起来。

答案 1 :(得分:0)

您正在选择“Y fmn”表。对于Y中的每一行,将重复结果。您需要一种方法来聚合结果,可能还有一个分组。

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