我有一张桌子
--------------------
ID | Name | RollNO
--------------------
1 | A | 18
--------------------
2 | B | 19RMK2
--------------------
3 | C | 20
--------------------
我的第二张表是
-----------------------
OldRollNo | NewRollNo
-----------------------
18 | 18RMK1
-----------------------
19 | 19RMK2
-----------------------
20 | 20RMK3
-----------------------
21 | 21RMK4
-----------------------
22 | 22RMK5
-----------------------
我希望得到的表格像
----------------------------------
ID | Name | RollNo | LatestRollNo
----------------------------------
1 | A | 18 | 18RMK1
----------------------------------
2 | B | 19RMK2 | 19RMK2
----------------------------------
3 | C | 20 | 20RMK3
----------------------------------
选择查询会是什么样的?这只是我问题的复制品。我使用了CASE语句和select查询,但由于我的表中的记录很大,所以花费了太多时间。在我的第二个表中,OldRollNo列是唯一的。更多的事情是,如果新分配的RollNo已经存在,则在生成的RollNo列中,应该将其精确复制到下一列,即LatestRollNo。我只需要检查那些旧的RollNo。 感谢。
答案 0 :(得分:1)
您需要使用内连接。
SELECT t1.ID,t1.Name,t2.RollNo,t2.NewRollNo AS LatestRollNo
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.RollNo=t2.OldRollNo OR t1.RollNo=t2.NewRollNo
答案 1 :(得分:1)
select f.ID, f.name, f.RollNo, s.NewRollNo as "Latest RollNo"
from FirstTable f
inner join
SecondTable s on f.RollNo = s.OldRollNo or f.RollNo = s.NewRollNo
答案 2 :(得分:1)
select t.id,t.name,t.rollno,tt.newrollno as latestrollno from
talble1 t
left join
table2 tt on t.rollno = tt.oldrollno
答案 3 :(得分:1)
尝试这样的事情:
select t1.ID
, t1.Name
, t1.RollNO
, LatestRollNO = coalesce(n.NewRollNo, o.NewRollNo)
from t1
left join t2 o on t1.RollNO = o.OldRollNo
left join t2 n on t1.RollNO = n.NewRollNo
听起来你的问题是表现而不是逻辑;假设您在t2.OldRollNo
和t2.NewRollNo
上有适当的索引,那么这样的事情应该有希望允许使用适当的索引。
OR
子句中CASE
或WHERE
的问题在于,这些问题并不总是适用于有效的查询;希望这对你的情况更有用。