首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出受相同抗生素影响的细菌对

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

Stack Overflow用户
提问于 2018-05-30 11:15:16
回答 2查看 72关注 0票数 0

这是我第一次sql查询分配中的最后一项任务,我发现它比其他任务要困难得多。我有三张桌子

  • 细菌(bid,name) --含有细菌的名称和名称
  • 抗生素(辅助物,名称)-含有抗生素的名称和名称
  • 效果(帮助,出价)-含有影响细菌的抗生素的标识(使用细菌)

这项任务要求给受相同抗生素影响的对细菌(如果一种抗生素影响细菌A,它也会影响细菌B--相反)。

这就是我所想的

代码语言:javascript
复制
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)

我知道语法是错误的,甚至可能是我的方法。

,什么是我处理这个任务的最好方法?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 11:18:03

这其实很简单。这是一种自我连接。

不过,首先,我要警告您在FROM子句中使用逗号。如果您正在学习SQL,您应该正确地学习它,并学习使用正确的、显式的、标准的JOIN语法。

所以,我们的想法是:

代码语言:javascript
复制
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

这会返回细菌的识别信息。我让你去查真名。

票数 1
EN

Stack Overflow用户

发布于 2018-05-30 11:50:15

这里需要一个关系除法查询。

对于下列数据

代码语言:javascript
复制
CREATE TABLE Effect
(
aid INT,
bid INT
);

INSERT INTO Effect
VALUES (20, 1),
       (21, 1),
       (20, 2),
       (21, 2),
       (21, 3);

提取所需信息的一种方法是

代码语言:javascript
复制
SELECT eaids,
         GROUP_CONCAT(DISTINCT bid
                      ORDER BY bid SEPARATOR ',') as bids
FROM 
(
SELECT bid,
         GROUP_CONCAT(DISTINCT aid
                      ORDER BY aid SEPARATOR ',') as eaids
       FROM Effect
       GROUP BY bid
) T
GROUP BY eaids
HAVING COUNT(*) > 1;  

回传

代码语言:javascript
复制
    eaids   bids
    20,21   1,2

显示ids 1和2的细菌都受到同一组抗生素(20和21)的影响。

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50603262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档