使用复合键访问数据

Accessing data with use of composite key

我似乎不了解如何使用复合键。设置一个似乎没问题。但是,找不到有关如何使用它的示例。

我的想法是有一个选项可以说,即 select * from tableA where primary_key = something 如果它是单个主键或复合键,则无需详细说明。

MySQL 正在通过连接重复复合键的信息。因此,例如复合键由这些列组成:(id_company_subsid、id_company、id_subsidiary、company_subsidiary_start) 因此复合键打印为:

Duplicate entry '92078-2706-6552-2010-12-31' for key 'PRIMARY'

是否可以用类似的方式构建查询? IE。请问select * from tableA where primary_key = '92078-2706-6552-2010-12-31'和MySQL怎么用呢?它会将其与预设复合键中的所有列进行匹配吗?

Edit/Clarification: 此问题的解决方案旨在用于自动化软件中,将具有相同架构的 table 进行相互比较。具有各种主键的表(一些是单一的,一些是复合的)。表格按原样提供。

每个 table 都添加了一列,其中包含该行中所有其他列的散列值。这用于tables之间的比较。

目标是通过两个 table 的两列(主键 + 哈希列)进行内部连接,找出两者之间的差异。

只需在每个单独的列中添加一个条件,如下所示:

SELECT ....
  FROM t
 WHERE t.fee = '92078'
   AND t.fi  = '2706'
   AND t.fo  = '6552'
   AND t.fum = '2010-12-31'    

没有机制可以为 "primary key" 或 "unique key" 或任何 "key" 指定条件。 Table由列组成,请参考列。

我们可以使用引用列的表达式。我们可以创建这样的表达式:

CONCAT(t.fee,'-',t.fi,'-',t.fo,'-',t.fum)

但是我们不想在 WHERE 子句中对该表达式使用相等比较,因为那样无法有效地使用索引;这将强制 MySQL 为 table.

中的每一行计算该表达式

根据@spencer7593 对他的回答的评论。看来我的目标无法以这种方式实现。每个主键列都必须单独处理。

@spencer7593 澄清评论:

@Rob: no, not in the context of a MySQL query to retrieve a row based on the value of the columns in the primary key, no – spencer7593 Jun 14 at 15:25