Ms查询到SQL Server - DistinctRow

时间:2016-09-27 03:51:12

标签: sql sql-server ms-access

将此MS Access查询转换为在SQL Server中运行的语法是什么,因为它没有DistinctRow关键字

UPDATE DISTINCTROW [MyTable] 
INNER JOIN [AnotherTable] ON ([MyTable].J5BINB = [AnotherTable].GKBINB) 
                          AND ([MyTable].J5BHNB = [AnotherTable].GKBHNB) 
                          AND ([MyTable].J5BDCD = [AnotherTable].GKBDCD) 
SET [AnotherTable].TessereCorso = [MyTable].[J5F7NR];

4 个答案:

答案 0 :(得分:3)

DISTINCTROW [MyTable]从结果中删除重复的MyTable条目。例如:

str_replace('.',',',$variable)

尽管联系人在多个订单时多次获得相同的item_number和名称,但DISTINCTROW会将此项减少为每个项目一行。因此,整个联接仅仅是为了确保您只选择至少存在一个订单的项目。据我所知,您在任何其他DBMS中都找不到DISTINCTROW。可能是因为它不需要。检查存在时,我们当然使用select distinctrow items items.item_number, items.name from items join orders on orders.item_id = items.id; (或EXISTS)。

您正在加入MyTable和AnotherTable并期望出于某种原因为一个AnotherTable记录获取相同的MyTable记录,因此您只能使用DISTINCTROW获取一次。如果您为一个AnotherTable记录获得两个不同的 MyTable记录,您的查询将(希望)失败。

更新的作用是:

IN

但这两次使用大约相同的子查询。所以我们想要从查询中更新。

根据< some columns>获取一个结果记录的最简单方法在标准SQL查询中是聚合数据:

update anothertable
set tesserecorso = (select top 1 j5f7nr from mytable where mytable.j5binb = anothertable.gkbinb and ...)
where exists       (select *            from mytable where mytable.j5binb = anothertable.gkbinb and ...)

如何编写updateble查询不同于一个DBMS。以下是SQL-Server的最终更新语句:

select *
from anothertable a
join 
(
  select j5binb, j5bhnb, j5bdcd, max(j5f7nr) as j5f7nr
  from mytable
  group by j5binb, j5bhnb, j5bdcd
) m on  m.j5binb = a.gkbinb and m.j5bhnb = a.gkbhnb and m.j5bdcd = a.gkbdcd;

答案 1 :(得分:1)

MS Access SQL中的DISTINCTROW谓词删除了连接语句中表的所有字段的重复项,而不仅仅是所选的查询字段(几乎所有SQL方言中都DISTINCT都有)。因此,请考虑使用DISTINCT谓词选择派生表中的所有字段:

UPDATE [AnotherTable]
SET [AnotherTable].TessereCorso = main.[J5F7NR]
FROM 
    (SELECT DISTINCT m.* FROM [MyTable] m) As main
INNER JOIN [AnotherTable]
    ON  (main.J5BINB = [AnotherTable].GKBINB) 
    AND (main.J5BHNB = [AnotherTable].GKBHNB) 
    AND (main.J5BDCD = [AnotherTable].GKBDCD) 

答案 2 :(得分:0)

userSchema {
    name: String,
    ....
    ....
}

答案 3 :(得分:0)

查询的另一个变体..(太懒了得到原始表)。 但是像上面的查询更新35行=,这一个

UPDATE [Albi-Anagrafe-Associati]
SET 
[Albi-Anagrafe-Associati].CRegDitte = [055- Registri ditte].[CRegDitte], 
[Albi-Anagrafe-Associati].NIscrTribunale = [055- Registri ditte].[NIscrTribunale], 
[Albi-Anagrafe-Associati].NRegImprese = [055- Registri ditte].[NRegImprese]
FROM  [055- Registri ditte]
WHERE EXISTS(
    SELECT * 
    FROM [055- Registri ditte]-- [Albi-Anagrafe-Associati] 
    WHERE ([055- Registri ditte].GIBINB = [Albi-Anagrafe-Associati].GKBINB) 
    AND ([055- Registri ditte].GIBHNB = [Albi-Anagrafe-Associati].GKBHNB) 
    AND ([055- Registri ditte].GIBDCD = [Albi-Anagrafe-Associati].GKBDCD))