我在Jira数据库上的MySQL上运行以下命令:
SELECT LOCAL_ISSUE_KEY , REMOTE_ISSUE_KEY
FROM AO_A912D8_SYNC_INFORMATION
WHERE substr(LOCAL_ISSUE_KEY, 5)
IN
(SELECT issuenum
FROM jiraissue
WHERE issuetype
IN
(SELECT ID
FROM issuetype
WHERE pname = "Story"
)
)
;
这就像一个符咒,但是,我不满意,因为LOCAL_ISSUE_KEY
中的值的长度是可变的:EFW-12345或FWAI-5432。所以我将不得不更改为substr(LOCAL_ISSUE_KEY, 5)
或substr(LOCAL_ISSUE_KEY, 6)
因此,我想做些不同的事情,感谢 WHERE IN
,让CONCAT()
检查正确的字符串,而不是减去其中的一部分。
作为草稿,我首先尝试使用它:
SELECT LOCAL_ISSUE_KEY , REMOTE_ISSUE_KEY
FROM AO_A912D8_SYNC_INFORMATION
WHERE LOCAL_ISSUE_KEY
IN
(SELECT CONCAT('EFW-',issuenum)
FROM jiraissue
WHERE issuetype
IN
(SELECT ID
FROM issuetype
WHERE pname = "Story"
)
)
;
但这不起作用,查询永远存在
请注意,它可以通过以下方式进行查询:
SELECT LOCAL_ISSUE_KEY , REMOTE_ISSUE_KEY
FROM AO_A912D8_SYNC_INFORMATION
WHERE LOCAL_ISSUE_KEY
IN
(CONCAT('EFW-','58276'))
;
我还尝试在()
周围使用更多SELECT CONCAT()
,但是它仍然使数据库的搜索变得疯狂。 CPU达到100%。
有关信息,第二个SELECT
处的查询有效:
SELECT CONCAT('EFW-',issuenum) FROM jiraissue WHERE issuetype IN (SELECT ID FROM issuetype WHERE pname = "Story" );
10610 rows in set (0.06 sec)
以下是数据样本的方式:
issuetype
ID pname
10000 Epic
10001 Story
jiraissue
ID issuenum PROJECT issuetype
154705 1942 12000 10001
project
ID pname pkey
12000 myproject EFW
AO_A912D8_SYNC_INFORMATION
LOCAL_ISSUE_KEY REMOTE_ISSUE_KEY
EFW-1942 ABC-12354
答案 0 :(得分:0)
您可以尝试使用:SUBSTRING_INDEX(str, delim, count)
您的情况:SUBSTRING_INDEX(LOCAL_ISSUE_KEY, "-", 1)
不要使用CONCAT
,因为它太重了,因为您需要在子查询中更改所有结果。
甚至更好:
RIGHT(str, len)
->代替len,使用SUBSTRING_INDEX
答案 1 :(得分:0)
我不知道您的桌子有多大,即存储了多少个jiraissues或项目。但是,您是否尝试过执行速度更快?
SELECT LOCAL_ISSUE_KEY , REMOTE_ISSUE_KEY
FROM AO_A912D8_SYNC_INFORMATION
WHERE LOCAL_ISSUE_KEY
IN
(SELECT distinct CONCAT('EFW-',issuenum)
FROM jiraissue
WHERE issuetype
IN
(SELECT distinct ID
FROM issuetype
WHERE pname = "Story"
)
)
;