sql - 如何在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;
我应该添加什么来满足我上面提到的条件。
解决方案
我认为您误解了这里的基础知识。创建表是一回事,与之交互(创建、读取、更新和删除数据)是另一回事。
让我们假设您有这样的产品表结构。
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';
推荐阅读
- django - 缺少 ModelForm 额外字段
- ios - 使用核心数据,是否可以在获取期间更改实体属性的值?
- html - 在 sublime text 3.1.1 上保存 HTML 时权限被拒绝
- python - setup.py 通过 conda (conda-forge opencv) 安装了 cv2 依赖项
- flask - 如何结合 Flask REST API 和 Flask Web App?
- debugging - 使用 Delve 调试:执行函数
- javascript - 更改标签材质-ui的字体大小
- javascript - 无法访问嵌套函数中更改的变量值
- python - psycopg2.DataError:类型字符变化的值太长(50)
- python - 在相交处找到入口出口