0

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

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'
4

2 回答 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'

您必须填写“FIX THIS”:使用适当的列名的行

关于 OR,我将一些捆绑到 IN() 条件中,并将其括起来。

于 2013-05-20T09:37:21.227 回答
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
于 2013-05-20T09:35:38.873 回答