gpt4 book ai didi

mysql - 由4个表组成的SQL查询组合搜索

转载 作者:行者123 更新时间:2023-11-29 12:59:55 26 4
gpt4 key购买 nike

我的 SQL 查询有问题(我正在使用 MySQL)

我有一些表,它们必须找到必须相乘的输出。

第一表脂质:

    ID  |  name     |  mass  |  hg  |
1 | PC 32:2 | 700 | PC |
2 | PC 32:1 | 800 | PC |

第二个表 FA:

    ID  | name      | mass
1 | FA 16:1 | 300
2 | FA 16:0 | 400
3 | FA 16:2 | 200

一个第三表猫:

    ID  | name  | snpos  |  backbone  | LC
1 | gpl | 2 | 25 | 1

第四张信用证:

    ID  | name  | mass 
1 | PC | 75

我需要一个 SQL 查询,它可以为我提供使用所有 4 个表中的内容的结果。

我需要一个结果,告诉我 FA 的哪种成分(表 2)可以为我提供正确的输入脂质(表 1)。

所以我将输入 hg = PC 和质量 = 700。通过这些信息,它应该告诉我它可能是哪种 FA 成分。

从表 3 cat 中,它应该使用 snpos 信息来找出在这种情况 2 中应该找到多少 FA,并且主链应该添加到与表 4 LC 中的质量相同的结果中,否则它永远不会获得大量输入。

它看起来像:

 FA 16:1 FA 16:1 (mass 600) + PC (mass 75) + backbone (25) = 700

最佳答案

这并不是一个明确的解决方案,甚至也不是该方法的提倡;只是原理演示...

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 |
+----------+------------+------------+----+-------+---------+--------+---------+--------+--------+--------+-------+--------+----------+-------+

关于mysql - 由4个表组成的SQL查询组合搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com