0

私は、生活を楽にするために外部キーを介してリンクを達成する方法を見つけようとして頭を悩ませてきました。私は2つのテーブルを設定しており、それらへの3番目のリンクを作成して、3番目のテーブルにいくつかの列を追加したいと考えています。これが私が思いついた構文です...

SQL Fiddle (サンプル データ付き)

シャツ

CREATE TABLE shirts(
    shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    shirt_name VARCHAR(100) NOT NULL,
    shirt_type VARCHAR(10) NOT NULL,
    shirt_size VARCHAR(20) NOT NULL,
    qp_price_id VARCHAR(20) NOT NULL,
    o_price_id VARCHAR(20) NOT NULL
)ENGINE=INNODB;

Vネック、ラグランスリーブ、キャップスリーブなどのシャツを取り揃えております。

価格表

CREATE TABLE price_list(
    price_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    price_cat VARCHAR(20) NOT NULL,
    price NUMERIC(6,2) NOT NULL
)ENGINE=INNODB

私がやりたいのは、シャツ テーブルから shirt_name、shirt_type、shirt_size 列を選択する 3 番目のテーブルを作成し、2 つの列を作成します。そのシャツの価格...そして、表示される価格が制御されるWHERE句を何らかの形で使用する可能性があると考えました

WHERE shirts.qp_price_id=price_list.price_cat AND shirts.o_price_id=price_list.price_cat

このようにして、複数のアイテムの価格をできるだけ簡単に変更できるようにしたいと考えています。このチャンクは、私が表現する必要があるさまざまなクルーネック シャツのためのものです...もっとあります...すべてのクルーネック シャツは、New Born-1X adult から同じ価格であるため、「crn-qp-a」に起因するものがあります。および「crn-oa」なので、「crn-qp-a」の価格値を1回だけ変更して、20インスタンスに自動的に更新することができれば、20回行う必要はありません....これを行います意味がわかりますか?...助けてください...笑

4

1 に答える 1

1

まず、テーブルから価格情報を削除shirtsして保持し、3 番目のテーブルを作成します。その中で、シャツを価格にprice_listリンクすることができます。shirt_idprice_id

create table shirt_price (
  shirt_id int UNSIGNED not null,
  qp_price_id int UNSIGNED not null,
  o_price_id int UNSIGNED not null,
  primary key (shirt_id, price_id),
  CONSTRAINT shirt_price_ibfk_1 FOREIGN KEY (shirt_id) REFERENCES shirts (shirt_id),
  CONSTRAINT shirt_price_ibfk_2 FOREIGN KEY (qp_price_id) REFERENCES price_list (price_id),
  CONSTRAINT shirt_price_ibfk_3 FOREIGN KEY (o_price_id) REFERENCES price_list (price_id)   
)ENGINE=INNODB;

たとえば、shirtsテーブルに次のシャツがあるとします。

SHIRT_ID    SHIRT_NAME      SHIRT_TYPE  SHIRT_SIZE  
1           Crewneck Tee    Men         S
2           Crewneck Tee    Men         M
3           Crewneck Tee    Men         L
4           Crewneck Tee    Men         1X
5           Crewneck Tee    Men         2X

テーブルのprice_list価格は次のとおりです。

PRICE_ID    PRICE_CAT   PRICE
1           crn_qp_a    27.2
2           crn_o_a     25.31
3           crn_qp_b    28.1

次に、各シャツが 2 つの価格にリンクされます。1 つはqp価格用で、もう 1 つは価格用oです。

SHIRT_ID    QP_PRICE_ID   O_PRICE_ID
1           1             2
2           1             2
3           1             2
4           3             2          
5           1             2           

すべての男性用シャツの価格を照会するには、次のようにします。

select s.shirt_name, s.shirt_type, s.shirt_size, p_qp.price, p_o.price
from shirts s,
   price_list p_qp,
   price_list p_o,
   shirt_price rel
where s.shirt_type = 'Men'
  and rel.shirt_id = s.shirt_id
  and rel.qp_price_id = p_qp.price_id
  and rel.o_price_id = p_o.price_id;

役に立つ読み物:

于 2012-11-30T22:08:48.943 に答える