OleDB JOIN语法不正确

本文关键字:不正确 语法 JOIN OleDB | 更新日期: 2023-09-27 18:22:46

我最近在StackOverflow(MySQL在字段=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中涉及的两个表,我相信这就是我犯错误的地方。

OleDB JOIN语法不正确

加入条件需要与加入一起

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可以移动到其中

我碰巧喜欢这种风格
在MSSQLT-SQL和一些具有大量联接的查询的情况下,通过将where条件上移到联接中,我获得了更高效的查询计划。过滤发生得早而不是晚。

如果您不相信可以在联接中放入硬值,请参阅SQLfiddle