0

我一直在绞尽脑汁想弄清楚如何通过外键完成链接以帮助使生活更轻松。我设置了两个表,并希望对它们进行第三个链接,并在第三个表中添加几列。这是我想出的语法...

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 列,然后创建两列,一列是 qp_price,另一个是 o_price,并将这些外键设置为要抓取的价目表表那件衬衫的价格……我想可能会以某种方式使用 WHERE 子句,其中显示的价格由

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

我想这样做,这样我就可以尽可能轻松地对多个项目进行价格更改。这一块仅适用于我需要代表的每种圆领衬衫……还有更多……所有圆领衬衫的价格与新生儿 - 1X 成人相同,所以我将这些归于“crn-qp-a”和“crn-oa”,所以如果我可以一次更改“crn-qp-a”的价格值并让它自动更新到 20 个实例,所以我不必这样做 20 次....这样做有意义吗?....请帮助...大声笑

4

1 回答 1

1

你想,首先,从shirts表中删除价格信息并保留它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 个价格,一个是qp价格,另一个是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 回答