0

色名の表があります

Red
Yellow
Green
Purple

カラートップスのテーブルもあります

RedandGreen
Red
YellowandRedandGreen
Violet

私がやりたいことは、3 番目のテーブルを作成することです。ここで、赤を選択すると、赤が含まれるすべてのトップが表示されます。もう 1 つは、紫を選択すると、紫を戻す必要があることです。

これは可能ですか?

ありがとう

W

4

5 に答える 5

2

はい、可能ですが、非常に非現実的です。特に、藤色、ラベンダー、ライラックなどの紫の色合いをどんどん追加し始めると、それは良い考えではありません.

あなたがしなければならないことは、colors_to_tops と呼ばれる 3 番目のテーブルを作成し、データを入力するときに、各トップを返してほしいすべての色に割り当てることです。

カラーテーブル

id|color
--------
 1|Red
 2|Yellow
 3|Green
 4|Purple

カラートップス

id|TopName
--------------
 1|RedandGreen
 2|Red
 3|YellowandRedandGreen
 4|Violet

color_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
于 2013-04-30T13:27:22.897 に答える
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 つだけ持つことができます。

于 2013-04-30T13:22:01.703 に答える
1

私の意見では、情報を表示するために 3 つ目のテーブルを作成する必要はありません。正しい外部キーを使用して両方のテーブルをリンクすると、ジョブが機能します。

見る:

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)
于 2013-04-30T13:27:13.940 に答える
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' ;

SQLフィドル

于 2013-04-30T13:31:55.227 に答える
0

そこから別のテーブルを作成する理由はわかりませんが、次のように機能します。

select c.color, t.colors
from color c 
  left join tops t on t.colors like '%' + replace(c.color,'Purple','Violet') + '%'

SQL フィドルのデモ

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 + '%'

別のデモ

于 2013-04-30T13:19:31.163 に答える