【问题标题】:OleDB JOIN Syntax Not CorrectOleDB JOIN 语法不正确
【发布时间】:2016-02-21 19:52:06
【问题描述】:

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

【问题讨论】:

  • INNER JOIN sdccomp s 关于什么?您必须指定链接哪些列。

标签: c# select oledb where


【解决方案1】:

join条件需要跟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 可以移动到哪里

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

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

【讨论】:

  • q.qsp_what 应该只是在哪里。很好的收获。
  • @Luaan 你确定它在连接中也不起作用。我用 TSQL 就是这样做的。
  • 它可以在 T-SQL 中工作,但它绝对 属于 在 where - 它不是连接条件,它是一个简单的过滤器。 T-SQL 相当宽容——其他语言可能对这样的事情不太满意。
  • 您要加入 to 的表的条件属于该联接的 on 子句 - qspreset 是您要加入的表 from,所以该表的条件只属于where子句。
  • 仅限@MarkBannister?我添加了一个 SQLfiddle MySQL 5.6,表明您可以在连接中放置一个硬值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2021-12-06
相关资源
最近更新 更多