我有一个查询,其中select中的子查询需要从某个表中获取值(如果存在)。出于商业原因,我不想在此处粘贴查询,但这是我尝试做的简化示例:
select a, b, (select x from z) as c from table where ...
查询在TOAD中运行正常,但是当我在数据对象中浏览ASP.NET表适配器向导时,它会抱怨sql语句:“SELECT子句中的错误NEAR','”。我不确定它是否仍会在运行时工作,即使它抱怨?我知道预览不起作用,它没有创建数据表。有人经历过这个吗?
我想这样做的原因是因为填充字段c的查询并不总是有值但我必须返回a和b,即使c没有值。任何一个有sql知识的人都可以建议一个解决方法。如果可能,我想坚持使用1个表适配器查询。
答案 0 :(得分:2)
表Z的外连接?
SELECT t.a,t.b,z.x
FROM table t LEFT OUTER JOIN Z ON (t.y = Z.y)
WHERE...
如果它们存在,这将为您提供Z值,否则为NULL。
答案 1 :(得分:2)
当工具不理解查询时,一个始终有效的方法是创建一个封装查询的视图。
CREATE VIEW v AS SELECT a, b, (select x from z) as c from table
然后,您将在ASP.NET中使用简单查询,如:
SELECT a, b, c FROM v where...
该视图现在包含您的业务逻辑,并将与您的所有其他代码一起保存在源代码管理存储库中。