首页 > 解决方案 > 如何在SQL中的某些条件下使用外键链接两个表?

问题描述

我想在某些条件下链接两个表。比如拿一张桌子的产品(itemno、item、qty、price、status)和第二张桌子的链接(Sno、itemno、status)。链接中的 itemno 和 status 是引用产品的外键。

问题是:- 我希望表格链接仅从状态已售出而不是未售出的产品中获取那些数据。.

基本代码是这样的: -

CREATE TABLE LINK(
    SNO              INT PRIMARY KEY,
    PRODUCT_ITEMNO   INT NOT NULL,
    PRODUCT_STATUS   CHAR(5) NOT NULL,
    FOREIGN KEY ( PRODUCT_ITEMNO,
                  PRODUCT_STATUS )
        REFERENCES PRODUCTS ( ITEMNO,
                              STATUS ) on update CASCADE ON DELETE RESTRICT;

我应该添加什么来满足我上面提到的条件。

标签: sql

解决方案


我认为您误解了这里的基础知识。创建表是一回事,与之交互(创建、读取更新删除数据)是另一回事

让我们假设您有这样的产品表结构。

CREATE TABLE products ( 
    item_no INT PRIMARY KEY, 
    item VARCHAR(20) NOT NULL , 
    qty SMALLINT UNSIGNED NOT NULL , 
    price DECIMAL(8,2) NOT NULL , 
    status ENUM('SOLD','UNSOLD') NOT NULL
);

要将其链接到您的任何表格(在本例中links),您只需执行此操作。

CREATE TABLE links(
    s_no             INT PRIMARY KEY,
    product_item_no  INT NOT NULL,
    FOREIGN KEY ( product_item_no ) 
        REFERENCES products ( item_no ) 
        ON UPDATE CASCADE 
        ON DELETE RESTRICT
);

请注意,不需要状态,因为可以通过连接两个表从 products 表中获取它。

例如,通过在稍后的时间点发出选择查询。

例如。

SELECT l.*, p.status FROM links l
    LEFT JOIN products p ON p.item_no = l.product_item_no
WHERE p.status = 'SOLD';

推荐阅读