这是我的第一个 SQL 查询任务中的最后一个任务,我发现它比其他任务要困难得多。 我有三张 table :
- Bacteria(bid,name) - 包含细菌的 ID 和名称
- Antibiotic(aid,name) - 包含抗生素的 ID 和名称
- Effect(aid,bid) - 包含影响细菌的抗生素 ID(使用的细菌 ID)
任务要求提供受相同抗生素影响的细菌对(如果抗生素影响细菌 A,它也应该影响细菌 B - 反之亦然)。
这就是我的想法:
SELECT b1.*,b2.*
FROM Bacteria b1, Bacteria b2
WHERE b1.bid, b2.bid IN (SELECT e1.bid, e2.bid
FROM Effect e1, Effect e2
WHERE e1.aid = e2.aid)
我知道语法是错误的,甚至可能是我的方法错误。
我完成这项任务的最佳方式是什么?
谢谢
最佳答案
这实际上非常简单。这是一个自加入。
首先,我想警告您在 FROM
子句中使用逗号。如果你正在学习 SQL,你应该正确地学习它,并学习使用正确的、显式的、标准的 JOIN
语法。
所以,想法是:
SELECT e1.bid, e2.bid
FROM Effect e1 JOIN
Effect e2
ON e1.aid = e2.eid AND
e1.bid < e2.bid; -- no need to include the same pair twice
这将返回细菌 ID。我会让你努力获取真实的名字。
关于mysql - 列出受相同抗生素影响的细菌对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603262/