我最近在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
中涉及的两张桌子,我相信这是我犯错误的地方。
答案 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