OleDB JOIN语法不正确

时间:2015-11-19 15:21:03

标签: c# select oledb where

我最近在StackOverflow(MySQL Returns All Rows When field = 0)上提出了一个关于MySQL无效的查询语句的问题。我现在有一个非常类似的问题,这次使用OleDB,我尝试使用连接来包含以0作为条目的字段,但不选择表中的每个字段作为结果。

在上述问题中发布的新外观MySQL查询作为已接受的答案顺利运行。然而,我写的OleDB对应的几乎不一样。它有点乱,因为表名不是很好(我没有创建这个数据库),我得到一个简单的语法错误;

myQuery.CommandText = "SELECT s.scm_num, s.scm_name, c.cr3_text, q.qsp_value, s.scm_bprefix, s.scm_nxbnum FROM qspreset q INNER JOIN sdccomp s LEFT OUTER JOIN cntref3 c ON s.scm_cntref3=c.cr3_id AND q.qsp_relat=s.scm_invtype AND q.qsp_what=13";

我在这里查询另一张桌子以及LEFT OUTER JOIN中涉及的两张桌子,我相信这是我犯错误的地方。

1 个答案:

答案 0 :(得分:1)

加入条件需要加入

myQuery.CommandText = 
"SELECT s.scm_num, s.scm_name, c.cr3_text, q.qsp_value, s.scm_bprefix, s.scm_nxbnum    
FROM qspreset q   
INNER JOIN sdccomp s 
      on q.qsp_relat = s.scm_invtype AND q.qsp_what = 13  
LEFT OUTER JOIN cntref3 c 
      ON s.scm_cntref3 = c.cr3_id";

q.qsp_what = 13可以移动到

我碰巧喜欢这种风格 对于MSSQL T-SQL和一些具有大量连接的查询,我通过将where条件移动到连接中来获得更高效的查询计划。过滤器发生得早,而不是最后一次。

如果您不相信自己可以在加入中加入硬性价值,请参阅SQLfiddle