我有这个查询。如果徽标为空,或者按钮为空,或者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'

最佳答案

您的查询有两个主要问题:


您没有正确包围OR条件
您在表之间没有连接条件,从而导致“交叉连接”


尝试这个:

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()条件,并放在了括号中。

10-04 16:06