我有一张桌子"表"包含ID,Col1和Col2,Col3。 Col2可以是0或1。 我希望Col2在行中,其中Col1具有相同的值。 前
我想要这样的东西
+----+-------+------+-----------+
| ID | Col1 | Col2 | Col3 |
+----+-------+------+-----------+
| 1 | "One" | 0 | "Yeah" |
| 2 | "One" | 0 | "Meh" |
| 3 | "One" | 0 | "Why Not" |
| 4 | "Two" | 1 | "Huh"! |
+----+-------+------+-----------+
而不是
+----+-------+------+-----------+
| ID | Col1 | Col2 | Col3 |
+----+-------+------+-----------+
| 1 | "One" | 0 | "Yeah" |
| 2 | "One" | 0 | "Meh" |
| 3 | "One" | 1 | "Why Not" | (Normally it must be 0 or line 1 and 2
| 4 | "Two" | 1 | "Huh"! | Must be "1" )
+----+-------+------+-----------+
答案 0 :(得分:0)
即使MySQL支持检查约束,您也不会使用check
约束来执行此操作。我认为最好的方法是使用外键约束。
您需要第二个表格,其中包含有效的col1
/ col2
值:
create table Col1Col2 as (
col1 varchar(255) not null primary key,
col2 int not null,
unique (col1, col2) -- this is not strictly necessary see below
);
然后你的桌子就是:
create table t as (
id int auto_increment primary key,
col1 varchar(255) not null,
col2 int not null
col3 int,
constraint fk_t_col1_col2 foreign key (col1, col2) references col1col2(col1, col2)
);
但是,我甚至不会将col2
存储在t
中。而是将其从t
中删除,然后在col1col2
中查找值。
您的基本问题是您没有以关系格式存储数据,因为此要求表明您有另一个实体。