mysql - 从 SQL 到 HQL 连接和删除

标签 mysql sql database hibernate hql

让这个 SQL 查询像一个魅力一样工作,想将其转换为 HQL,但有一些困难。

SQL 查询:

DELETE med1
FROM MEDECINES med1, MEDECINES med2
WHERE (
    REPLACE(med1.`MEDECINE_ID`, ' ', '') < REPLACE(med2.`MEDECINE_ID`, ' ', '') AND 
    REPLACE(med1.`MEDECINE_DCI`, ' ', '') = REPLACE(med2.`MEDECINE_DCI`, ' ', '') AND 
    REPLACE(med1.`MEDECINE_MARK`, ' ', '') = REPLACE(med2.`MEDECINE_MARK`, ' ', '') AND 
    REPLACE(med1.`MEDECINE_FORM`, ' ', '') = REPLACE(med2.`MEDECINE_FORM`, ' ', '') AND 
    REPLACE(med1.`MEDECINE_DOSAGE`, ' ', '') = REPLACE(med2.`MEDECINE_DOSAGE`, ' ', '') AND 
    med1.`MEDECINE_REDEEMABILITY` = med2.`MEDECINE_REDEEMABILITY`
);

HQL(到目前为止我能写的):

DELETE FROM Medecine med1
        WHERE EXISTS (
           FROM Medecine med2
           WHERE(
                med1.medecineId < med2.medecineId AND
                REPLACE(med1.medecineDci, ' ', '') = REPLACE(med2.medecineDci, ' ', '') AND
                REPLACE(med1.medecineMark, ' ', '') = REPLACE(med2.medecineMark, ' ', '') AND
                REPLACE(med1.medecineForm, ' ', '') = REPLACE(med2.medecineForm, ' ', '') AND
                REPLACE(med1.medecineDosage, ' ', '') = REPLACE(med2.medecineDosage, ' ', '') AND
                med1.medecineRedeemability = med2.medecineRedeemability
            )
        )

最佳答案

使用EXISTS

DELETE FROM medecines med1
WHERE  EXISTS (SELECT 1
               FROM   medecines med2
               WHERE  REPLACE(med1.medecine_id, ' ', '') <
                      REPLACE(med2.medecine_id, ' ', '')
                      AND REPLACE(med1.medecine_dci, ' ', '') =
                          REPLACE(med2.medecine_dci, ' ', '')
                      AND REPLACE(med1.medecine_mark, ' ', '') =
                          REPLACE(med2.medecine_mark, ' ', '')
                      AND REPLACE(med1.medecine_form, ' ', '') =
                          REPLACE(med2.medecine_form, ' ', '')
                      AND REPLACE(med1.medecine_dosage, ' ', '') =
                          REPLACE(med2.medecine_dosage, ' ', '')
                      AND med1.medecine_redeemability =
                          med2.medecine_redeemability ); 

关于mysql - 从 SQL 到 HQL 连接和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213906/

相关文章:

java - 是否可以在 hibernate 状态下将表视为只读?

java - 在两个不同但相同的表中插入记录,Hibernate?

PHP串联后分页

SQL:在此查询中使用 "all"和 "min"的条件有何不同?

mysql - 避免返回多行

c# - 随项目一起部署数据库

php - 使用php创建动态树

mysql - 书店的最佳销售数据库结构

sql - 创建 sql 表的副本

javascript - 处理数据库事务返回