SQL查找两张表主键相同的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查找两张表主键相同的数据相关的知识,希望对你有一定的参考价值。
表A:
主键:key1,key2,key3,key4
表B:
主键:key1,key2,key3,key4
要取得表A和表B主键值相同的数据
求最优化的SQL查询语句
From 表A A , 表B B
Where A.Key1 = B.Key1
And A.Key2 = B.Key2
And A.Key3 = B.Key3
And A.Key4 = B.Key4 参考技术B SELECT * FROM A JOIN B ON A.key1=B.key1 AND A.key2=B.key2 AND A.key3=B.key3 AND A.key4=B.key4本回答被提问者采纳 参考技术C 同时满足还是只要满足一个?
SQL,两张表,一张共享主键
【中文标题】SQL,两张表,一张共享主键【英文标题】:SQL, two tables, one shared primary key 【发布时间】:2012-09-11 15:45:20 【问题描述】:我想要两个表,这样我就可以将旧记录移动到第二个表中,这样我就可以保持主表很小,但仍然希望能够使用一个 int 主键链接到两个表。
例如: (我已经根据我的真实表中的内容简化了这个示例)我正在跟踪会话并希望将过期的会话移动到 Expired_Sessions 表中,但我还将会话链接到像 Login_Attempts 表这样的日志表,我不想要断开这些表的链接。
Sessions
--------------------
PKey | int
Session_ID | varchar
Expired_Sessions
--------------------
PKey | int
Session_ID | varchar
Login_Attempts
--------------------
Session_FKey | int
Count | int
我确实想到了两种可行的方法,但我认为应该有更好的方法来做到这一点?
一个:在我的 sys_constants 表中存储一个主键计数器,并在每次添加记录时递增它。 或
二:添加另一个表,将会话表主键和过期会话主键链接到第三个主键,然后使用第三个主键链接到我的日志表。
【问题讨论】:
您使用的是哪个 DBMS?甲骨文? PostgreSQL? DB2? 【参考方案1】:您是否考虑过使用表分区?我不太了解您的要求,但可能值得调查。
当表和索引变得非常大时,分区可以通过以下方式提供帮助 将数据划分为更小、更易于管理的部分。这 论文侧重于水平分区,其中大组 行将存储在多个单独的分区中。的定义 分区集是根据您的需要定制、定义和管理的。 Microsoft SQL Server 2005 允许您根据以下条件对表进行分区 使用定义的范围或列表的特定数据使用模式。 SQL 服务器 2005 年还为长期管理 通过添加设计的功能分区表和索引 围绕新的表和索引结构。
http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx
【讨论】:
【参考方案2】:为什么不为每个表保留单独的主键,而是添加另一列作为会话的唯一标识符,无论它位于哪个表中?我看到你有 Session_ID...如果你索引它,你甚至可以用它来查找。
【讨论】:
以上是关于SQL查找两张表主键相同的数据的主要内容,如果未能解决你的问题,请参考以下文章