mysql - 列出受相同抗生素影响的细菌对

标签 mysql sql

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

相关文章:

mysql - Node sql语法错误

MySQL - 如何使用扩展属性?

php - 使用 PHP 运行 .sql 文件

SQL - 使用列名作为值插入

mysql - 检索特定月份所有新客户的 SQL 语句

php - 无法打开流 : HTTP request failed! HTTP/1.0 400 错误请求

mysql - MySQL 中索引较多的表,但使用了错误的索引,导致执行时间过长

mysql - 结合 SQL View 和 Left Outer Join 查询

php - 在php中打印mysql数据库

sql - 判断月份是否包含条目