2014-06-24 47 views
0

我有下表。僅當另一列中的數據匹配時才具有唯一值

SQL-小提琴:http://sqlfiddle.com/#!2/8d142/1

CREATE TABLE steps 
    (
     id int auto_increment primary key, 
     step_day varchar(10), 
     title varchar(32), 
     description varchar(500), 
     step_order tinyint unsigned not null 
    ); 


-- Test insert 
INSERT INTO steps 
(step_day, title, description, step_order) 
VALUES 
('monday', 'Step 1', 'Do some stuff.', '1'), 
('saturday', 'Step 1', 'Do some stuff.', '1'), 
('monday', 'Step 2', 'Do some stuff.', '2'), 
('saturday', 'Step 2', 'Do more stuff.', '2'); 

在測試插入數據是目前確定,但我想,以保護列「標題」和「step_order」從重複的條目只有當數據「 step_day'列是一樣的。

所以......

('monday', 'Step 1', 'Do some stuff.', '1'), 
('monday', 'Step 1', 'Do some stuff.', '1') 

...是不好的,但...

('monday', 'Step 1', 'Do some stuff.', '1'), 
('saturday', 'Step 1', 'Do some stuff.', '1') 

...是確定的。

我該怎麼做?謝謝。

回答

2
CREATE TABLE steps 
(
    id int auto_increment primary key, 
    step_day varchar(10), 
    title varchar(32)not null, 
    description varchar(500), 
    step_order tinyint unsigned not null, 
    CONSTRAINT uc_steps UNIQUE (step_day,title,step_order) 
); 

,這將讓你在step_day,標題,step_order唯一的數據。

這將允許您添加

INSERT INTO steps 
(step_day, title, description, step_order) 
VALUES 
('monday', 'Step 1', 'Do some stuff.', '1'), 
('saturday', 'Step 1', 'Do some stuff.', '1'); 

但不

INSERT INTO steps 
(step_day, title, description, step_order) 
VALUES 
('monday', 'Step 1', 'Do some stuff.', '1'), 
('monday', 'Step 1', 'Do some stuff.', '1'); 
0

你必須使用GROUP BY條款

SELECT id, 
     step_day, 
     title, 
     description, 
     step_order 
FROM steps 
GROUP BY step_day,title; 

SQL Fiddle

相關問題