这是我第一个sql查询任务中的最后一个任务,我发现它比其他任务要困难得多。我有三个表:
细菌(出价,名称)-包含细菌的ID和名称
抗生素(帮助,名称)-包含抗生素的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,则应正确学习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/