SQLite对单个列的多个引用

时间:2014-02-27 18:06:02

标签: sql sqlite foreign-keys

例如

Table1
id|v1|v2|v3
1 |10|20|30
2 |20|30|40
3 |30|40|50

Table2
id |a|b|c
100|2|1|1
200|1|3|2
300|3|2|2

Table2.a,b和c应该是Table1.id的外键。

如果我尝试:

CREATE Table2(
id, a, b, c,
FOREIGN KEY(a, b, c) REFERENCES Table1(id));

我得到:“错误:外键中的列数与引用表中的列数不匹配”

如果我这样做

CREATE Table2(
id,
a REFERENCES(id),
b REFERENCES(id),
c REFERENCES(id));

我得到:“错误:靠近”id“:语法错误”

2 个答案:

答案 0 :(得分:3)

正确的语法更像是这样:

CREATE TABLE Table2 (
  id int,
  a int,
  b int,
  c int,
  FOREIGN KEY(a) REFERENCES Table1(id),
  FOREIGN KEY(b) REFERENCES Table1(id),
  FOREIGN KEY(c) REFERENCES Table1(id)
);

答案 1 :(得分:1)

你是第二次尝试不远,你刚刚错过了引用的表名。对于单列外键,内联(和未命名)FK约束定义更紧凑,而对于复合FK,您必须在表的末尾指定FK。

C:\Users\DDevienne>sqlite3
SQLite version 3.8.3.1 2014-02-11 14:52:19
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table t1 (id primary key);
sqlite> create table t2 (
   ...> id primary key,
   ...> a references t1(id),
   ...> b references t1(id),
   ...> c references t1(id)
   ...> );
sqlite>