当字段= 0

时间:2015-11-19 11:41:10

标签: mysql select where-clause

我在这里看到的几个问题与此非常相似,但是我没有找到一个特定于我认为我的问题的答案。

我有两个表,subcompaniespresets。这两个表通过ID CntRefIDPresetIDFoxPro链接在一起。我希望在ID匹配时从Preset表格的文本列中选择所有文字。

CntRefID中有数字时,这可以完美地运行。但是,如果它为0,则会返回presets文本列中的每个字段。

这是我的查询文字;

myQuery.CommandText =   
"SELECT CompanyID, CompanyName, PresetText, InvHeader, Prefix, NextBnum  
FROM sdcdatabase.sdcsubcompanies, sdcdatabase.presets   
WHERE (CntRef=PresetIDFoxPro OR CntRef='0') AND PresetReferenceFoxPro=3";

我无法理解为什么每个领域都被选中。我在引号中使用0并且没有引号,我也看到它可能是由于一个字段是整数而一个是字符(mySQL returns all rows when field=0)。然而,我的两个字段都是整数。

2 个答案:

答案 0 :(得分:1)

由于OR CntRef='0'条件(CntRef为0),where表中的所有行都会返回。

这是因为您现有的PresetReferenceFoxPro子句可以被解释(忽略subcompanies条件):

  

我想要来自presets表的所有记录以及来自presets表的任何匹配记录,或来自CntRef表中subcompanies为0的所有记录subcompanies表。

如果您希望返回LEFT OUTER JOIN个记录,即使他们没有预设匹配,那么您需要使用SELECT CompanyID, CompanyName, PresetText, InvHeader, Prefix, NextBnum FROM sdcdatabase.sdcsubcompanies as s LEFT OUTER JOIN sdcdatabase.presets as p ON s.CntRef=p.PresetIDFoxPro AND p.PresetReferenceFoxPro=3 - 就像这样:

PresetReferenceFoxPro

我假设presets位于SELECT表上 - 它会澄清查询,以便为 function change ( aa,bb ) { aa=5; bb="aaa"; return [aa, bb]; } function Tst1() { aa=6; bb="bbb"; result = change(aa,bb); aa = result[0]; bb = result[1]; document.writeln(aa); document.writeln(bb); } Tst1();子句中的每一列添加表别名,但我不知道哪些列来自哪些表。

答案 1 :(得分:0)

您需要通过删除“或”或添加更多条件来更改“where”

 WHERE (CntRef=PresetIDFoxPro) .... other conditions

仅举例来说