我在这里看到的几个问题与此非常相似,但是我没有找到一个特定于我认为我的问题的答案。
我有两个表,subcompanies
和presets
。这两个表通过ID CntRefID
和PresetIDFoxPro
链接在一起。我希望在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)。然而,我的两个字段都是整数。
答案 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
仅举例来说