使用复合键访问数据
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
我似乎不了解如何使用复合键。设置一个似乎没问题。但是,找不到有关如何使用它的示例。
我的想法是有一个选项可以说,即
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