我有两张桌子。每次更新行时,都会插入一个新行以及变体ID。该表看起来像:
第一张表:
ID1 variation_id1
111 1
111 1
第二张表:
ID2 ID-LineNO variation_id2
111 10 1
111 20 1
111 10 2
111 20 2
结果应为:
ID1 ID2 ID-LineNO variation_id2
111 111 10 2
111 111 20 2
我想根据最新的变体ID以及相应的行号来选择ID。
Select DISTINCT ID2,ID1,ID-LineNO,variationid1
from second table
inner join first table on ID1 = ID2
where variation_id2 in (select max(variation_id2)
from second table
where variation_id2 = variation_id2
group by ID2)
我尝试使用上面的代码来获取结果,但仍然会获得重复的行。您可以帮我解决如何根据变体ID消除重复行的问题。
答案 0 :(得分:2)
在子查询中,您需要对表进行别名,以便子查询与外部查询相关,而不是与自身相关:
Select DISTINCT ID2,ID1,ID-LineNO,variationid1
from second_table t2
inner join first_table t1 on t1.ID1 = t2.ID2
where variation_id2 in (select max(variation_id2)
from second_table t3
where t3.variation_id2 = t2.variation_id2
group by ID2)
答案 1 :(得分:1)
我不确定这个问题,在第一个表中没有主键,在第二个表中你没有指定哪个是,但我认为你在select子句中写了错误的“variationid” 。我想有一个最清楚的例子,因为没有必要编写WHERE子句
SELECT DISTINCT ID2,ID1,ID-LineNO,variationid2
FROM second_table INNER JOIN first_table on ID2 = ID1
WHERE variationid2 in (
SELECT max(variation_id2)
FROM second_table
GROUP BY ID2
)
答案 2 :(得分:1)
如果您再次加入Max(variation_Id2),您将能够获得所需的结果。
Select DISTINCT [second table].ID2,ID1,[ID-LineNO],variation_id2
from [second table]
inner join [first table] on ID1 = [second table].ID2
INNER JOIN (SELECT Id2, MAX(variation_Id2) AS MaxiD FROM [second table] GROUP BY Id2) S ON S.Id2 = [second table].Id2
WHERE variation_id2 = S.MaxiD