我有以下查询。我将其简化为演示目的。我正在使用SQL Server - t-sql
func GetCase() {
let RNumber = Int(arc4random_uniform(9)+1)
if categoria == 1 {
}
}
如果子查询返回多个记录,我喜欢将tm.LocID分配给null,如果只返回了1个记录,则将其分配给tm.LocID。我正在寻找一种简单的方法来做到这一点。任何帮助,将不胜感激。
我可以看到的一种方法是使用CASE语句并检查是否(Count *> 1)然后赋值null else返回值,但这需要select语句中的select语句。
答案 0 :(得分:0)
上面的查询(以及此处的许多其他答案)是一个相关的子查询,由于它对每条记录执行单独的聚合查询,因此速度非常慢。以下内容将解决您的问题并且可能执行得更好,因为计数一次性发生。
SELECT
CASE
WHEN x.locid IS NOT NULL THEN x.locid
ELSE NULL
END
FROM tblMain m
LEFT JOIN (
SELECT
locid
FROM tblLoc
GROUP BY locid
HAVING COUNT(1) = 1
) x
ON x.locid = m.locid
;
以上是Postgres语法(我熟悉的),所以你必须使它与TSQL兼容。
答案 1 :(得分:0)
您对class FirstErrorHandler: UIAlertViewDelegate {
init() {
let errorAlert: UIAlertView = UIAlertView()
errorAlert.delegate = self
errorAlert.message = "Are you sure?"
errorAlert.addButtonWithTitle("Yes")
errorAlert.addButtonWithTitle("No")
errorAlert.show()
}
func alertView(view: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
// handle first kind of errors
}
}
class SecondErrorHandler: UIAlertViewDelegate {
init() { ... }
func alertView(view: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
// handle another kind of errors
}
}
class MyViewController {
var alertHandler: UIAlertViewDelegate! // store strong reference to alert handler
...
func showSomeError() {
self.alertHandler = FirstErrorHandler()
...
}
}
使用case
表达式有正确的想法,但它不需要另一个子查询:
count(*)
答案 2 :(得分:0)
或只使用HAVING
条款,例如
Select tm.LocID = (select LocID from tblLoc tl
where tl.LocID = tm.LodID
group by locID
having count(*) = 1)
)
from tblMain tm