我有三张桌子。 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;
答案 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)