mysql - 如何将一个表与另一个只有 1 个公共(public)值的表连接

标签 mysql sql

我有一张 table :

ABC1234    GTR    some information    01/03/07    some information    0.55 
ABC1234    GTR    some information    14/11/18    some information    0.45 
ABC1234    GTR    some information    14/11/18    some information    0.45 
ABC1234    GTR    some information    22/11/18    some information    0.55

和另一个表:

ABC1234   3   39448.940091 
ABC1234   3   30806.72651    
ABC1234   3   14817.730764 
ABC1234   3   13482.769

我想将第二个表末尾的 4 个十进制值添加到第一个表中,但是当我运行查询时:

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3  
from table_a ta,
table_b tb
where ta.column1, = tb.column1
and cd.contract_number = 'ABC1234';

我想最终得到:

ABC1234    GTR    some information    01/03/07    some information    0.55   39448.940091 
ABC1234    GTR    some information    14/11/18    some information    0.45   30806.72651 
ABC1234    GTR    some information    14/11/18    some information    0.45   14817.730764 
ABC1234    GTR    some information    22/11/18    some information    0.55   13482.769

但是我得到了 16 行数据,它在 table_b 中循环并显示 table_a 中每行的 4 个值

最佳答案

SQL 表表示无序集。除非列指定顺序,否则没有顺序。

我可以推测,在第一个表中,第四列用作日期(提示:您应该使用 yyyy-mm-dd 格式)并对行进行排序。在第二个表中,它们按第三列降序排列。

如果是这样,您可以将它们组合起来。这在 MySQL 8+ 中表达起来更简单:

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3  
from (select ta.*,
             row_number() over (partition by column1 order by column4) as seqnum
      from table_a ta
     ) ta join
     (select tb.*,
             row_number() over (partition by column1 order by column3 desc) as seqnum
      from table_b tb
     ) tb
     on ta.column1 = tb.column1 and ta.seqnum = tb.seqnum
where cd.contract_number = 'ABC1234';

您可以在早期版本中执行此操作,但使用变量最容易完成 seqnum 的计算。

关于mysql - 如何将一个表与另一个只有 1 个公共(public)值的表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55935329/

相关文章:

sql - 如果 `WHERE IN` 字段不存在,我希望 `IN` 返回 0

Sqlite:查询计算某行在 'through'表中被引用的次数

mysql - 如何计算此查询 mysql 5.7 的最小值、最大值和平均值

PHP:如何缩短网址+从数据库中获取数据

php - 实时服务器上的 Codeigniter 错误消息:mysqli::real_connect(): (HY000/2002):连接被拒绝

mysql - 为什么从 MySql 迁移到 sql server

mysql - 是否可以向 mysql 查询声明?

sql - SQL 中的 String 和 nvarchar(5000) 有什么区别?

sql - 如何查找一年前这一天的数据?

mysql - 发票表设计