首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由4个表搜索SQL查询组合

由4个表搜索SQL查询组合
EN

Stack Overflow用户
提问于 2014-05-06 13:02:30
回答 1查看 765关注 0票数 0

我对SQL查询有问题(我使用的是MySQL)

我得到了一些表,它们必须找到一个必须乘以的输出。

第一桌脂:

代码语言:javascript
复制
    ID  |  name     |  mass  |  hg  |
    1   |  PC 32:2  |  700   |  PC  |
    2   |  PC 32:1  |  800   |  PC  |

第二表FA:

代码语言:javascript
复制
    ID  | name      | mass
    1   | FA 16:1   | 300
    2   | FA 16:0   | 400
    3   | FA 16:2   | 200

第三桌猫:

代码语言:javascript
复制
    ID  | name  | snpos  |  backbone  | LC
    1   | gpl   |  2     |   25       | 1

第四表LC:

代码语言:javascript
复制
    ID  | name  | mass 
    1   | PC    | 75    

我需要一个SQL查询,它可以给我一个结果,在这里我使用了所有4个表中的一些内容。

我将需要一个结果,可以给我的组成的FA(表2),可以给我正确的输入脂质(表1)。

所以我会输入hg = PC和mass = 700。根据这一信息,它应该给我可能是哪种FA组成。

从表3 cat中,它应该使用snpos信息来确定它在本例2中应该找到多少FA,并且主干网应该添加到与表4 LC的质量相同的结果中,否则它将永远不会到达输入的质量。

它看起来应该是:

代码语言:javascript
复制
 FA 16:1 FA 16:1 (mass 600) + PC (mass 75) + backbone (25) = 700
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-06 13:47:36

这并不是一个明确的解决方案,甚至也不是一种方法的推广;只是对原则的一种证明.

代码语言:javascript
复制
DROP TABLE IF EXISTS lipid;

CREATE TABLE lipid
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name VARCHAR(12) NOT NULL UNIQUE     
,mass INT NOT NULL  
,hg CHAR(2) NOT NULL
);

INSERT INTO lipid VALUES
(1   ,'PC 32:2',700,'PC'),(2,'PC 32:1',800,'PC');

DROP TABLE IF EXISTS FA;

CREATE TABLE FA
(ID  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name       VARCHAR(12) NOT NULL
,mass INT NOT NULL
);

INSERT INTO fa VALUES 
(1   ,'FA 16:1',300),
(2   ,'FA 16:0',400),
(3   ,'FA 16:2',200);


DROP TABLE IF EXISTS Cat;

CREATE TABLE Cat
(ID  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name  VARCHAR(12) NOT NULL
,snpos  TINYINT NOT NULL
,backbone  INT NOT NULL
,LC INT NOT NULL
);

INSERT INTO Cat VALUES
(1   ,'gpl',2,25,1);

DROP TABLE IF EXISTS LC;

CREATE TABLE LC
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name  CHAR(2) NOT NULL
,mass INT NOT NULL
);

INSERT INTO LC VALUES (1,'PC',75);

SELECT l.id lipid_id
     , l.name lipid_name
     , l.mass lipid_mass
     , l.hg
     , fa.*
     , c.id cat_id
     , c.name cat_name
     , c.snpos snpos
  FROM lipid l
  JOIN lc
    ON lc.name = l.hg
  JOIN cat c
    ON c.lc = lc.id
  JOIN
     ( SELECT 3 snpos,x.name name_x,x.mass mass_x,y.name name_y,y.mass mass_y,z.name name_z,z.mass mass_z, x.mass+y.mass+z.mass total FROM fa x JOIN fa y ON y.id < x.id JOIN  fa z ON z.id < y.id
       UNION
       SELECT 2      ,x.name, x.mass,y.name,y.mass,NULL,0, x.mass+y.mass FROM fa x JOIN fa y ON y.id < x.id
       UNION
       SELECT 1,name,mass,NULL,0,NULL,0, mass FROM fa
     ) fa
    ON fa.snpos = c.snpos
   AND fa.total = 700-c.backbone-lc.mass 
 WHERE l.mass = 700 
   AND l.hg = 'PC';
+----------+------------+------------+----+-------+---------+--------+---------+--------+--------+--------+-------+--------+----------+-------+
| lipid_id | lipid_name | lipid_mass | hg | snpos | name_x  | mass_x | name_y  | mass_y | name_z | mass_z | total | cat_id | cat_name | snpos |
+----------+------------+------------+----+-------+---------+--------+---------+--------+--------+--------+-------+--------+----------+-------+
|        1 | PC 32:2    |        700 | PC |     2 | FA 16:2 |    200 | FA 16:0 |    400 | NULL   |      0 |   600 |      1 | gpl      |     2 |
+----------+------------+------------+----+-------+---------+--------+---------+--------+--------+--------+-------+--------+----------+-------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23495497

复制
相关文章

相似问题

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