还是举例说:
一个表有字段A(字符型)、字段B(整形),都有无重复约束。现在给定2个参数X(字符型)、Y(整形),按以下条件查询结果标志1、找出是否有满足条件 (A=X) AND (B=Y) 的记录(同一条记录中) 返回结果标志:1
2、找出是否有满足条件 (A=X) AND (B<>Y) 的记录(同一条记录中) 返回结果标志:2
3、找出是否有满足条件 (A<>X) AND (B=Y) 的记录(同一条记录中) 返回结果标志:3
4、找出是否有满足条件:其中一条记录(A=X) 且有另一条记录(B=Y) (或反之) 返回结果标志:4这个实现是不是一次查找无法实现?如果能实现怎么写?
我现在用笨办法,就是找4次,然后还得根据查找结果进行相应记录更新什么的操作,目前数据还少没问题,如果数据多了估计不好了(是静态数据,而且不估计多于10W)今天在试用的时候发现和查找顺序以及返回结果后的处理顺序有关,呵呵。
一个表有字段A(字符型)、字段B(整形),都有无重复约束。现在给定2个参数X(字符型)、Y(整形),按以下条件查询结果标志1、找出是否有满足条件 (A=X) AND (B=Y) 的记录(同一条记录中) 返回结果标志:1
2、找出是否有满足条件 (A=X) AND (B<>Y) 的记录(同一条记录中) 返回结果标志:2
3、找出是否有满足条件 (A<>X) AND (B=Y) 的记录(同一条记录中) 返回结果标志:3
4、找出是否有满足条件:其中一条记录(A=X) 且有另一条记录(B=Y) (或反之) 返回结果标志:4这个实现是不是一次查找无法实现?如果能实现怎么写?
我现在用笨办法,就是找4次,然后还得根据查找结果进行相应记录更新什么的操作,目前数据还少没问题,如果数据多了估计不好了(是静态数据,而且不估计多于10W)今天在试用的时候发现和查找顺序以及返回结果后的处理顺序有关,呵呵。
WHEN ((A=X) AND (B<>Y)) THEN 2
WHEN ((A<>X) AND (B=Y)) THEN 3
WHEN (EXISTS(SELECT * FROM TargetTable WHERE (A=X))
AND EXISTS (SELECT * FROM TargetTable WHERE (B=Y))) THEN 4
ELSE 0 END AS GetDataRslt
FROM TargetTable
或者四个都作为子查询放入不同的列也行的!
CASE WHEN (A.C41Count > 0) AND (A.C42Count > 0) THEN 1
ELSE 0 END AS C4Count
FROM
(SELECT (SELECT COUNT(*) FROM TargetTable WHERE ((A=X) AND (B=Y))) AS C1Count,
(SELECT COUNT(*) FROM TargetTable WHERE ((A=X) AND (B<>Y))) AS C2Count,
(SELECT COUNT(*) FROM TargetTable WHERE ((A<>X) AND (B=Y))) AS C3Count,
(SELECT COUNT(*) FROM TargetTable WHERE (A=X)) AS C41Count,
(SELECT COUNT(*) FROM TargetTable WHERE (B=Y)) AS C42Count) A
SQL语法用的少,总是感觉下不了手....我来试试顺便再带一个问题:还能不能更进一步,就是根据查询的结果直接进行一些操作:比如Update/Delete等操作这样就不要先查询,然后再更新操作什么的SELECT CASE WHEN ((A=X) AND (B=Y)) THEN () //结果为1不操作
WHEN ((A=X) AND (B<>Y)) THEN (Update Tbl SET B=Y) //不返回结果了,直接更新操作
WHEN ((A<>X) AND (B=Y)) THEN (Update Tbl SET A=X) //不返回结果了,直接更新操作
WHEN (EXISTS(SELECT * FROM TargetTable WHERE (A=X))
AND EXISTS (SELECT * FROM TargetTable WHERE (B=Y))) THEN (删除A=X的这条记录,同时把B=Y的这条记录的A更新为X) //这个比较麻烦了,伪代码都不懂的怎么写了...