我有下表。
SQL-Fiddle: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'仅在“步骤日”中的数据时从重复条目中获取列是一样的。
因此...
('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')
......没问题。
我该怎么做?谢谢。
答案 0 :(得分: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,title,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');
答案 1 :(得分:0)
您必须使用GROUP BY
子句
SELECT id,
step_day,
title,
description,
step_order
FROM steps
GROUP BY step_day,title;