在MySQL中没有得到任何结果

时间:2015-03-16 03:44:07

标签: mysql

我有三张桌子。 Protein,PubMed和第三个表(protein_has_pubmed)正在加入这两个表。

我写了这样的sql代码:

delimiter $$
create function ListOfPubMedIds(pr_id varchar(15)) 
returns varchar(500)
begin
Declare xx varchar(500);
select GROUP_CONCAT(pu.PubMedId) into xx
from protein p
join protein_has_pubmed pr on
p.UniprotKB_Accession=pr.Protein_UniprotKB_Accession
join pubmed pu on
pr.PubMed_P_id=pu.P_id
where   p.UniprotKB_Accession in('pr_id') ;
return xx;
end$$
delimiter ;  

select ListOfPubMedIds('P04637');  

但它没有在输出中返回任何值。它只是返回名为

的列
+++++++++++++++++++++++++++++ 
+ ListOfPubMedIds('P04637') +
+++++++++++++++++++++++++++++
+...........................+
+...........................+
+...........................+

当我运行以下查询时:

select GROUP_CONCAT(pu.PubMedId) 
from protein p
join protein_has_pubmed pr on
p.UniprotKB_Accession=pr.Protein_UniprotKB_Accession
join pubmed pu on
pr.PubMed_P_id=pu.P_id
where   p.UniprotKB_Accession in('P04637') ;  

它给了我正确的结果,如:

4006916,2946935,3894933,3025664,2905688,1915267,8316628,11058590,16131611,11023613

再次为以下代码获取相同的错误:

delimiter $$
create function HTMLLink(E_id varchar(15),E_id_link varchar(200)) 
returns varchar(350)
begin
Declare xx varchar(350);
select concat('<html><a hreaf=', '"', 
          E_id_link, '"target="_blank">  <b>',
          E_id,'</b></html>') into xx
from disease d
where   d.EntryId=E_id and d.EntryIdLink=E_id_link;
return xx;
end$$
delimiter ;

select HTMLLink('P04637','http://pir0.georgetown.edu/cgi-bin/entry_p2p.pl?cui=C0278836') as HTMLLink;

2 个答案:

答案 0 :(得分:0)

您的参数未在WHERE CONDITION中正确调用。你不应该把它括在单引号(')上。其次,如果您使用IN命令,SELECT语句应该在PREPARED STATEMENT中以包含参数中的所有值,因为如果您没有使用它,则只有第一个值才会在第一个逗号位于WHERE CLAUSE之前。试试下面我修改过的功能:

DELIMITER $$
CREATE FUNCTION ListOfPubMedIds (pr_id VARCHAR (15)) RETURNS VARCHAR (500) 
BEGIN
 DECLARE xx VARCHAR (500) ;
 SET @sql = CONCAT('SELECT GROUP_CONCAT(pu.PubMedId) 
INTO xx
FROM protein p
JOIN protein_has_pubmed pr ON   p.UniprotKB_Accession=pr.Protein_UniprotKB_Accession
JOIN pubmed pu ON pr.PubMed_P_id=pu.P_id
WHERE p.UniprotKB_Accession IN(',pr_id,')') ;
 PREPARE stmt FROM @sql ;
 EXECUTE stmt ;
 DEALLOCATE PREPARE stmt ;
 RETURN xx ;
END $$

DELIMITER;

答案 1 :(得分:0)

你似乎有一些错位的引号:

where   p.UniprotKB_Accession in('pr_id')

应该是:

where   p.UniprotKB_Accession in(pr_id)