Mysql 如何获取id取自select语句的表的记录

Mysql 如何获取id取自select语句的表的记录,mysql,having,nested-statement,Mysql,Having,Nested Statement,我有两张桌子。我试着从其中一条中选择一些记录。然后,该选择的ID部分应用于选择另一个表的一些记录。为此,我写了一条执行时间很长的语句。我甚至看不到结果。 而且,这使我的phpmyadmin与本地主机断开了连接 代码如下: SELECT * FROM uniquestructures as uns WHERE uns.ProteinID IN (SELECT unp.* FROM uniqueproteins as unp HAVING LENGTH(unp.PDBASequence) <

我有两张桌子。我试着从其中一条中选择一些记录。然后,该选择的ID部分应用于选择另一个表的一些记录。为此,我写了一条执行时间很长的语句。我甚至看不到结果。 而且,这使我的phpmyadmin与本地主机断开了连接

代码如下:

SELECT * FROM uniquestructures as uns WHERE uns.ProteinID IN (SELECT unp.* FROM uniqueproteins as unp HAVING LENGTH(unp.PDBASequence) < 20) as T)
为了清楚起见,首先它选择所有列的序列长度小于20的记录。稍后,根据所选记录的ID,我正在搜索与ProteinID具有相同ID的记录


非常感谢您的帮助

我想您需要在此处使用具有独特名称的内部联接:

您的查询可以是:

SELECT uns.*
FROM uniquestructures as uns 
INNER JOIN uniqueproteins as unp on uns.ProteinID = unp.ProteinId
where unp.PDBASequenceLength < 20;

祝你好运

首先,您可能需要阅读连接语法。第二,在uniquestructures和uniqueproteins中有多少行?另外-尝试将unp.*替换为guess unp.ProteinIDah。只是树枝。uns.ProteinId是否可以与uniqueproteins表中所有列的串联进行比较?我也使用了左连接。Uniquestructures和uniqueproteins具有相同的大小和相同的ID信息-20370行。但是序列长度小于20的行是2228。所以,我需要选择2228中的每个id,并返回具有该id的uniquestructures行。非常感谢,它成功了。我检查了我的代码,添加了distinct,并为left-join工作。但我想知道,为什么我发布的代码不起作用?只是为了学习:你能解释一下吗?没问题!问题在于您的子选择,即…选择unp.*。。。这需要更改为…选择unp.ProteinId。。。。我建议使用内部联接,因为这通常比嵌套sub-selects.PS更好。如果它起作用,那么您可能希望通过接受答案来表明这一点:
CREATE TRIGGER uniqueproteins_length_insert_trg
AFTER INSERT ON uniqueproteins FOR EACH ROW SET NEW.PDBASequenceLength = length(new.PDBASequence);

CREATE TRIGGER uniqueproteins_length_update_trg
AFTER UPDATE ON uniqueproteins FOR EACH ROW SET NEW.PDBASequenceLength = length(new.PDBASequence);

alter table uniqueproteins add key `uniqueproteinsIdx2` (PDBASequenceLength);
SELECT uns.*
FROM uniquestructures as uns 
INNER JOIN uniqueproteins as unp on uns.ProteinID = unp.ProteinId
where unp.PDBASequenceLength < 20;