我有顏色名稱表如何基於其他兩個表
Red
Yellow
Green
Purple
我也有一個表的彩色上裝
RedandGreen
Red
YellowandRedandGreen
Violet
我想要做的是創造什麼,創建第三個表第三張桌子,如果我選擇紅色,它會向我展示紅色的所有上衣,另一件我希望它做的事情是如果我選擇紫色,它需要帶回紫羅蘭。
這可能嗎?
感謝
W¯¯
我有顏色名稱表如何基於其他兩個表
Red
Yellow
Green
Purple
我也有一個表的彩色上裝
RedandGreen
Red
YellowandRedandGreen
Violet
我想要做的是創造什麼,創建第三個表第三張桌子,如果我選擇紅色,它會向我展示紅色的所有上衣,另一件我希望它做的事情是如果我選擇紫色,它需要帶回紫羅蘭。
這可能嗎?
感謝
W¯¯
在我看來,沒有必要創建第三個表來顯示您的信息。 如果您使用正確的外鍵鏈接兩個表,您的工作將會奏效。
請參見:
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)
不知道爲什麼你會想創建另一個表出來,但會是這樣工作的:
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'
。
--edit
正如其他人建議,可以考慮使用查找表來查找你的顏色。事情是這樣的:
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 + '%'
我看不到任何方式對紫=紫色不是有另一個表做到這一點。例如系統應該如何知道淺藍色和青色是相同的顏色?
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
並且只有一個顏色定義表。
如何創建此查找表? – wafw1971 2013-04-30 13:49:21
MS SQL有一些易於使用的可視化工具來創建表格。嘗試使用Microsoft SQL Management Studio。 http://www.microsoft.com/en-us/download/details.aspx?id=8961也可以編寫SQL來創建表:http://www.w3schools.com/sql/sql_create_table.asp並填充它:http://www.w3schools.com/sql/sql_insert.asp – 2013-04-30 13:59:30
注意這種文本匹配很容易創建和維護,但比其他人提供的基於ID的答案慢。先進的混合解決方案應該是可以輕鬆編輯文本匹配表,然後定期運行查詢來構建ID匹配表以匹配產品。然後,實際的接口將使用更快的ID匹配表。唯一的缺點是A)它需要對你正在做的事情有一個正確的理解,B)在定期查詢運行之前,新產品不會以彩色搜索顯示。 – 2013-04-30 14:04:11
是的,這是可能的,但是這將是可怕的不切實際。特別是當你開始添加越來越多的陰影時紫色,如淡紫色,薰衣草,丁香等。這不是一個好主意。
您需要做的是創建第三個名爲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
嗨胡安,這正是我想要的,但colors_to_tops如何知道使用什麼顏色ID什麼是SQL? – wafw1971 2013-04-30 13:30:37
將SQL添加到我的答案中。 – 2013-04-30 13:38:52
您可以創建一個連接表:
創建表與IDS
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' ;
選擇c.ColoursName,s.SilksName 從[DBO]。[顏色]Ç 左加入[DBO]。[絲綢] S S上。 SilksName like'%'+ replace(c.ColoursName,'Purple','Violet')+'%' 如何在現階段不提及紫色紫羅蘭的情況下編寫查詢? – wafw1971 2013-04-30 14:04:02
@ wafw1971 - 如果你不想硬編碼紫色=紫羅蘭,你需要另一張表 - 像其他人所建議的查找表。 – sgeddes 2013-04-30 14:07:27
我真的很陌生,所以我如何創建一個查找表?我將如何將其鏈接到上述查詢 – wafw1971 2013-04-30 14:11:30