这是我第一个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/

10-11 21:40