我有一个颜色名称表
Red
Yellow
Green
Purple
我还有一张彩色上衣表
RedandGreen
Red
YellowandRedandGreen
Violet
我想要做的是创建第三个表格,如果我选择红色,它会显示所有带红色的上衣,而我想让它做的另一件事是如果我选择紫色它需要带回紫色。< / p>
这可能吗?
由于
W
答案 0 :(得分:2)
对于Purple = Violet,我看不到有什么方法可以使用另一个查找表。例如,系统如何知道浅蓝色和青色是相同的颜色?
ColorShades
PrimaryColor|Shade
Purple|Purple
Purple|Violet
Blue|Blue
Blue|Cyan
...
Tops
TopColors
RedandGreen
Red
YellowandRedandGreen
Violet
SELECT TopColors
FROM Tops, ColorShades
WHERE ColorShades.PrimaryColor = Purple
AND Tops.TopColors like '%ColorShades.Shade%'
所以你可以有一个表格,将各种颜色翻译成你允许的几个表格。
假设您使用此选项进行下拉菜单选择,您可以将该选择的来源设为SELECT DISTINCT PrimaryColor FROM ColorShades
,并且只有一个颜色定义表。
答案 1 :(得分:2)
是的,这是可能的,但这将是非常不切实际的。特别是当你开始添加越来越多的色调时,例如紫色,如紫红色,淡紫色,丁香花等。这不是一个好主意。
您需要做的是创建一个名为colors_to_tops的第三个表格,在输入数据时,将每个顶部分配给您想要返回的每种颜色。
颜色表
id|color
--------
1|Red
2|Yellow
3|Green
4|Purple
彩色上衣
id|TopName
--------------
1|RedandGreen
2|Red
3|YellowandRedandGreen
4|Violet
colors_to_tops
id|colorID|topID
----------------
1| 1| 1
2| 1| 2
3| 1| 3
4| 2| 3
5| 3| 1
6| 3| 3
7| 4| 4
SQL:
SELECT DISTINCT ct.* FROM
ColoredTops AS ct
LEFT JOIN
Colors_To_Tops AS ctt
ON
ct.id = ctt.topID
LEFT JOIN
Colors AS c
ON
ctt.colorID = c.id
WHERE c.color = @color
答案 2 :(得分:1)
在我看来,没有必要创建第三个表来显示您的信息。 如果使用正确的外键链接两个表,则您的工作将起作用。
请参阅:
create table color
(
id_color int not null,
ds_color varchar(50) null,
primary key (id_color)
)
create table color_tops
(
id_color int not null,
id_colortop int not null,
ds_colortop varchar(50) null,
primary key (id_colortop),
foreign key (id_color) references color(id_color)
)
select color.ds_color,
color_tops.ds_colortops
from color
inner join color on (color.id_color = color_tops.ds_colortops)
答案 3 :(得分:1)
您可以创建一个连接表:
使用ID创建表格
CREATE TABLE colour (
id int primary key,
colour varchar(10)
);
create table tops (
id int primary key,
tops varchar(50)
);
创建一个连接表来关联它们
create table top_colours
(
top_id int,
colour_id int
)
添加您的数据
insert into tops(id,tops)
select
1, 'RedandGreen'
union select
2, 'Red'
union select
3, 'YellowandRedandGreen'
union select
4, 'Violet';
insert into colour(id,colour)
select 1, 'Red'
union select
2, 'Yellow'
union select
3,'Green'
union select
4,'Purple';
insert into top_colours(top_id,colour_id)
select 1,1 union
select 1,3 union
select 2,1 union
select 3,2 union
select 3,1 union
select 3,3 union
select 4,4;
提出要求
select distinct tops.* from tops
join top_colours tc on tc.top_id = tops.id
join colour c on c.id = tc.colour_id
where c.colour = 'red' ;
select distinct tops.* from tops
join top_colours tc on tc.top_id = tops.id
join colour c on c.id = tc.colour_id
where c.colour = 'purple' ;
答案 4 :(得分:0)
不确定为什么你想要从中创建另一个表,但这样的工作会起作用:
select c.color, t.colors
from color c
left join tops t on t.colors like '%' + replace(c.color,'Purple','Violet') + '%'
然后,您可以根据需要添加WHERE
条件 - 例如where c.color = 'Red'
。
- 编辑
正如其他人所建议的那样,考虑使用查找表来显示颜色。像这样:
select c.color, t.colors
from color c
left join coloralias ca on c.color = ca.color
left join tops t on t.colors like '%' + c.color + '%' or t.colors like '%' + ca.alias + '%'