如果这个简单的查询没有返回结果(NULL),它会在一行中返回零,这是正确的。如果有一些结果,查询将返回错误512。
如何修改它以返回找到的值,如果没有则返回“0”?
select ISNULL( (select Name from NAMES
left join ADDRESS on NAMES.Name = ADDRESS.Person
where
NAMES.Name = myinput
) , 0) as Name
答案 0 :(得分:1)
好吧,如果你的内部查询返回多个值,你应该得到一个错误,因为 webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getCache().setMaxSize(0);
final HtmlPage loginpage = webClient.getPage(this.login_url);
List<HtmlForm> forms_from_login_page = loginpage.getForms();
HtmlForm form_from_login_page = forms_from_login_page.get(0);
String token = get__RequestVerificationToken(loginpage.asXml());
WebRequest web_req = loginpage.getWebResponse().getWebRequest();
web_req.setAdditionalHeader("__RequestVerificationToken", token);
HtmlTextInput userNameTextField = loginpage.getHtmlElementById("user-input");
HtmlPasswordInput passwordTextField = loginpage.getHtmlElementById("password-input");
userNameTextField.setValueAttribute(this.profile_id);
passwordTextField.setValueAttribute(this.password);
DomElement button = loginpage.getElementById("sign-in-btn");
button.setAttribute("type", "submit");
landing_page = button.click();
只能处理一个值。
我建议使用不同的方法。代码较长,但它会为您提供从查询返回的任意行数的正确结果:
isnull
使用内部查询作为cte只允许我写一次。
使用;WITH CTE AS
(
SELECT Name
FROM NAMES
LEFT JOIN ADDRESS ON NAMES.Name = ADDRESS.Person
WHERE NAMES.Name = @myinput
)
SELECT Name
FROM CTE
UNION ALL
SELECT '0'
WHERE NOT EXISTS(SELECT 1 FROM CTE)
会导致NOT EXISTS
中的第二个查询仅在cte未返回任何结果时返回union
。否则,您将从cte。
答案 1 :(得分:1)
将主查询包装到CTE中,现在
0