关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
两年前关门了。
改进这个问题
我有两张table:钥匙和订单
在key表中,我只有order id,但是我需要orders表中提供的更多细节,比如电子邮件、姓名。。等。
如何将具有匹配订单id的键附加到另一个表中?
键表
Key Order ID
----- --------
1234 0001
1235 0001
1532 0002
1602 0003
1802 0004
订单表
Email Order ID
----- --------
email1@example.com 0001
email1@example.com 0001
email2@example.com 0002
email3@example.com 0003
email4@example.com 0004
要求结果:
Email Order ID Key
----- -------- -------
email1@example.com 0001 1234
email1@example.com 0001 1235
email2@example.com 0002 1532
email3@example.com 0003 1602
email4@example.com 0004 1802
3条答案
按热度按时间taor4pac1#
您需要枚举每个表中的值,以避免订单上出现笛卡尔积。在mysql v8中,您可以使用
row_number()
. 这个答案显示了在早期版本中要做什么。相比之下,mysql 8+或几乎任何其他数据库中的代码如下所示:
选择o.,k.key from(select o.,row\ n()over(partition by order\ n id order by order\ n id)作为orders o的seqnum)o(select k.*,row\ n()over(partition by order\ n id,order\ n id)作为key k的seqnum)k on o.order\ n id=k.order\ n id and o.seqnum=k.seqnum;
slsn1g292#
可以通过创建表值sql函数并在查询中使用来实现这一点。
然后在select查询中检索如下结果:
7xllpg7q3#
一个简单的
join
应该做到:如果没有钥匙也可以下单,你应该用
left join
而不是join
.