【问题标题】:Get Unique Column from table 1 and table 2 in cross join在交叉连接中从表 1 和表 2 中获取唯一列
【发布时间】:2017-04-05 14:17:48
【问题描述】:

我正在使用交叉连接连接两个不相关的表,这将允许我使用结果更新第三个表。

例如。

Table1
  TableId,
  Table1Date

Table2   
  Table2Id

select top 10 t1.Id,t2.Id 't2Id' from table1 t1
Cross join table2 t2

上面的查询有效,但正如预期的那样,table1 有重复的条目

如何确保这 10 个结果条目都具有来自 t1 的不同值和来自 t2 的不同值?

我也希望使用这个结果来更新另一个具有不同值的表

update table 3 
Set table3.t2Id=t3.t2Id
(
   the select statement from above
) t3
where table3.Id=t3.T1Id

交叉连接的样本数据结果。 t2Id 是正确的,但 t1Id 重复。对格式错误表示歉意。我也在 t1Id 中寻找不同的值

t1Id t2Id 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03957DD7-B9B6-4D6A-9F04-84D810B4​​D50B 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 039EF33A-9CB1-4B0B-95DA-01B68A2494AD 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03A45657-7407-4D9A-8BD1-9011759FD6D0 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03A72BF8-C04C-4F48-82E0-9BF68B285356 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03AF3D6F-D6A3-42CC-B37C-7DC6F306679D 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03C24CD2-9C99-43AD-A80B-9F3139B25356 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03C89916-33A7-487A-8A6A-22364E1A4D90 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03D16609-A7ED-4846-BB39-C04C0A22A8ED 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03DB344B-4CFB-4C0E-BFA1-FB55D93A3C57 02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1 03DE5B67-347E-40FA-B85F-807C05DA2E90

【问题讨论】:

  • 您可以查看与您的问题相关的 QA stackoverflow.com/questions/12932045/…
  • 1,22,1一样吗?
  • @Charlesliam 这些都不起作用,可能是因为 t1.Id 和 t2.Id 是 guid 列。
  • @TimBiegeleisen nope(如果我得到你的 q 正确)因为我正在寻找相同格式的结果,因为我还将使用 t1.Id 结果来更新第三个表并确保不同第三个表中的行已更新
  • 我认为您的问题没有得到解决。如果我回复你1,22,1 是否可以接受?

标签: sql sql-server sql-server-2008


【解决方案1】:

要获得不同的对(例如,对 1|2 最多只出现一次):

select top 10 
  t1.Id as t1id,
  t2.Id as t2id
from table1 t1
cross join table2 t2
order by newid();

要获得不同的值(例如,对 1|2 不能与 1|3 或 3|2 一起出现):

select 
  t1.Id as t1id,
  t2.Id as t2id
from (select top 10 *, row_number() over (order by newid() as rn from table1) t1
join (select top 10 *, row_number() over (order by newid() as rn from table2) t2
  on t1.rn = t2.rn;

【讨论】:

  • 您已经编辑了您的请求,说您希望在 t1 中也有不同的值。我的第一个查询不能保证这一点。当您尝试时,它可能碰巧看起来如此,因为在选择十条记录之前是随机排序的,但您仍然可能会得到重复。第二个查询保证避免 t1 和 t2 值重复。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多