mysql+多列外键_MySQL中的多列外键?

如果我们想要外键的逻辑像这样

FOREIGN KEY COmments(issue_id)

REFERENCES Bugs(issue_id) OR FeatureRequests(issue_id)

例:

CREATE TABLE Issues (

issue_id int PRIMARY KEY,

status VARCHAR(20)

);

CREATE TABLE Comments (

comment_id int PRIMARY KEY,

issue_type VARCHAR(20), -- "Bugs" or "FeatureRequests"

issue_id BIGINT UNSIGNED NOT NULL,

comment TEXT

);

CREATE TABLE Bugs (

issue_id int PRIMARY KEY,

severity VARCHAR(20),

FOREIGN KEY (issue_id) REFERENCES Issues(issue_id)

);

CREATE TABLE FeatureRequests (

issue_id int PRIMARY KEY,

sponsor VARCHAR(50),

FOREIGN KEY (issue_id) REFERENCES Issues(issue_id)

);

INSERT INTO Issues VALUES(1,'ON'),(2,'ON'),(3,'OFF'),(6,'OFF'),(8,'ON');

INSERT INTO Comments VALUES(1,'Bugs',1,'A'),(2,'Bugs',3,'B'),(3,'Bugs',1,'C'),(4,'Bugs',3,'D'),(5 ,'FeatureRequests',8,'L'),

(6,'FeatureRequests',6,'W'),(7,'FeatureRequests',1,'ZX');

INSERT INTO Bugs VALUES(1,'severity_1'),(3,'severity_for_3');

INSERT INTO FeatureRequests VALUES(2,'sponsor_2_'),(8,'sponsor_for_8'),(1,'sponsor_for_1')

选择:

MariaDB [test]> SELECT * FROM Comments JOIN FeatureRequests ON Comments.issue_i

d = FeatureRequests.issue_id AND Comments.issue_type= 'FeatureRequests';

MariaDB [test]> SELECT * FROM Comments JOIN Bugs ON Comments.issue_id = Bugs.is

sue_id AND Comments.issue_type= 'Bugs';

+------------+------------+----------+---------+----------+----------------+

| comment_id | issue_type | issue_id | comment | issue_id | severity |

+------------+------------+----------+---------+----------+----------------+

| 1 | Bugs | 1 | A | 1 | severity_1 |

| 2 | Bugs | 3 | B | 3 | severity_for_3 |

| 3 | Bugs | 1 | C | 1 | severity_1 |

| 4 | Bugs | 3 | D | 3 | severity_for_3 |

+------------+------------+----------+---------+----------+----------------+

4 rows in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值