我有一个简单的模式,用于以两种不同的方式存储链接,我正在从一种方式迁移到另一种方式。在旧样式链接没有匹配的新样式链接的情况下,我已经能够使用querydsl使用 INSERT
从子查询。但是,当一个旧式链接有一个具有不同目的地的新式链接时,我想做一个 UPDATE
从一个子查询,我还不能让它在querydsl中工作,尽管我可以使用纯sql。
下面是我的基本伪模式:
TABLE LINK_A
type int
src int
dest int
TABLE LINK_B
child int
parent int
当一个老式的链接( LINK_A
)具有匹配的新式链接( LINK_B
)目的地不同。 src == child
以及 dest <> parent
,然后我要更新新样式的链接并设置其 parent
到旧式链接的 dest
.
以下是我成功使用的sql查询,用于执行此操作:
UPDATE LINK_B
SET parent = subquery.dest
FROM (SELECT src, dest
FROM LINK_A la
WHERE type = 42
AND EXISTS (
SELECT child FROM LINK_B lb
WHERE lb.child = la.src
AND lb.parent <> la.dest
)
) AS subquery
WHERE LINK_B.child = subquery.src;
我无法把它转换成querydsl。以下是我目前掌握的情况:
BooleanExpression oldLinkHasNewLinkWithDifferentDest = SQLExpressions
.select(LINK_B.child)
.from(LINK_B)
.where(
LINK_B.child.eq(LINK_A.src),
LINK_B.parent.ne(LINK_A.dest))
.exists();
SubQueryExpression<Tuple> oldLinksWithDifferentNewLinks = SQLExpressions
.select(LINK_A.src, LINK_A.dest)
.from(LINK_A)
.where(
LINK_A.linktype.eq(42),
oldLinkHasNewLinkWithDifferentDest
);
update(LINK_B) ??
.set(LINK_B.parent, ??
??
有人能帮我把这事做完吗?
暂无答案!
目前还没有任何答案,快来回答吧!