SQL查找两张表主键相同的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查找两张表主键相同的数据相关的知识,希望对你有一定的参考价值。

表A:
主键:key1,key2,key3,key4
表B:
主键:key1,key2,key3,key4
要取得表A和表B主键值相同的数据
求最优化的SQL查询语句

参考技术A Select A.*, B.*
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查找两张表主键相同的数据的主要内容,如果未能解决你的问题,请参考以下文章

怎样用Sql语句判断一张表中的两条数据相同

怎样用Sql语句判断一张表中的两条数据相同

SQL中如何将两个相同的表格组合成一个表格

SQL 两张表合并 (两张表的列都相同)

如何用SQL语句查询两张表中的相同字段数据

java程序对Oracle两张表结构相似的表的数据对比,具体如下