【问题标题】:Merge two tables without common column in sql在sql中合并两个没有公共列的表
【发布时间】:2014-12-03 09:26:28
【问题描述】:

我有两个表 A 和 B。表 A 包含字段“数字”。表 B 包含“number_start”和“number_end”。 我想合并这两个表,以便最终表包含 number 介于 number_start 和 number_end 之间的表的详细信息。

我想在 redshift /sql 中实现这一点。如果有人有线索,请告诉我。

【问题讨论】:

  • 这两个表是如何相互关联的?
  • 这两个表的来源基本上是不同的,我想将它们映射到一个表中。在表 A 中,它的详细信息是按数字给出的,而在其他表中,它是按范围给出的。
  • 你的意思是between as number_start
  • @rupali 好的,但是它们如何相互关联,什么逻辑决定了 numberstart 和 number end 应该喜欢哪个数字
  • @Dennis : 我的意思是介于 number_start

标签: sql merge


【解决方案1】:

执行此连接操作

Select a.Number,b.EndNumber,b.StartNumber
from A a join B b
on  a.Number >= b.StartNumber and a.Number <= b.EndNumber

【讨论】:

  • 感谢这个查询有意义!我会根据我的需要稍微更新一下。谢谢
【解决方案2】:
SELECT t1.`number`,t2.`end_number`, t2.`start_number` FROM table1 t1, `table2` t2
WHERE `number` >= start_number
AND number <=end_number

你想要这样的东西吗? Please check this

【讨论】:

  • 1) SQLfiddle 非常有用,但您应该在 SO 中发布您的代码,而不仅仅是链接。 2) 为什么要使用嵌套 SELECT?
  • @LS_dev 谢谢你的建议,我忘了删除上面的选择它会在一个选择中正常工作
【解决方案3】:

使用连接语句。试试这个。

select t1.numbers from t1,t2 where t1.numbers>t2.min and t1.numbers<t2.max;

【讨论】:

  • table1的个数必须在table2的两个数之间,普通join是解决不了的。
  • 是的,现在只有我了解用例,我尝试一下。
【解决方案4】:

如果两个表不相关,则可以使用此查询

select CONVERT(varchar, A.number_start) + CONVERT(varchar,B.number) + Convert(varchar,A.number_end)     from A cross join B

或者如果这个表有外键,那么你可以在这个查询中使用内连接

【讨论】:

  • 由于作者的这条评论,这将不起作用:@Dennis : i mean between as number_start &lt; number &lt; number_end
猜你喜欢
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
相关资源
最近更新 更多