如何生成复合主键?

olqngx59  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(439)

如何使复合主键像 column_1 + '-' + column_2 ,所选列是否来自另一个表?

mf98qq94

mf98qq941#

主键由定义主键的表中的列组成,而不是由另一个表中的列组成。您可以将其定义为:

create table t (
    column_1 <type>,
    column_2 <type>,
    primary key (column_1, column_2)
);

你没有指定类型,所以 <type> 列的类型。
我怀疑您正在创建一个连接表,而这些是对其他表的外键引用。看起来像:

create table t (
    column_1 <type>,
    column_2 <type>,
    constraint fk_t_column_1 foreign key (column_1) references t1(column_1),
    constraint fk_t_column_2 foreign key (column_2) references t1(column_2),
    primary key (column_1, column_2)
);

主键或其组件可以具有对其他表的外键引用。

yuvru6vn

yuvru6vn2#

主键是使用数据定义语言(ddl)创建的,ddl用于创建或修改对象。看起来您正在尝试使用数据操作语言(dml)创建一个主键,其中包括select语句。这是不可能的。
而且,看起来您正试图通过组合串联来创建单个主键 column1 + '-' + column2 . 复合主键由多列组成。这个 - 这里是无关的,因为它看起来像是用来格式化的,与行中的任何其他内容都没有关系。

mtb9vblg

mtb9vblg3#

insert into items(key_id, order_id, item_id, product_id, quantity, list_price, discount)
select cast(sales.order_items.order_id as varchar(4)) + '-' +  cast(sales.order_items.item_id as varchar(4)), sales.order_items.order_id,
sales.order_items.item_id, sales.order_items.product_id, sales.order_items.quantity, sales.order_items.list_price, sales.order_items.discount
from sales.order_items

相关问题