【发布时间】:2017-06-29 04:47:43
【问题描述】:
我的新系统不接受嵌套/子查询。我需要帮助将下面的 sql 转换为普通连接。我尝试了我的方法,但结果不一样:
SELECT
*
FROM
TRAINING.COURSE_SCHEDULE COURSE_SCHEDULE
LEFT JOIN
ENGINE.PHASE_SETTINGS PHASE_SETTINGS ON (COURSE_SCHEDULE.ETQ$CURRENT_PHASE = PHASE_SETTINGS.PHASE_ID)
LEFT JOIN
TRAINING.COURSE_PROFILE AS COURSE_PROFILE ON (COURSE_SCHEDULE.COURSE_PROFILE = COURSE_PROFILE.COURSE_PROFILE_ID)
LEFT JOIN
TRAINING.ETQ$COURSE_SCHEDULE_ASN ETQ$COURSE_SCHEDULE_ASN_1 ON (COURSE_SCHEDULE.COURSE_SCHEDULE_ID = ETQ$COURSE_SCHEDULE_ASN_1.COURSE_SCHEDULE_ID)
LEFT JOIN
ENGINE.USER_SETTINGS USER_SETTINGS_1 ON (ETQ$COURSE_SCHEDULE_ASN_1.ETQ$ASSIGNED = USER_SETTINGS_1.USER_ID)
LEFT JOIN
ENGINE.BOOLEAN_VALUES BOOLEAN_VALUES_1 ON (COURSE_SCHEDULE.TEST_IS_REQUIRED = BOOLEAN_VALUES_1.VALUE)
WHERE
PHASE_SETTINGS.PHASE_TYPE IN (5)
AND COURSE_PROFILE.COURSE_PROFILE_ID NOT IN
(SELECT COURSE_PROFILE.COURSE_PROFILE_ID
FROM TRAINING.COURSE_PROFILE COURSE_PROFILE
LEFT JOIN
TRAINING.ETQ$COURSE_PROFILE_TTL TEST_TEMPLATE_LINK ON (COURSE_PROFILE.COURSE_PROFILE_ID = TEST_TEMPLATE_LINK.COURSE_PROFILE_ID)
LEFT JOIN
TRAINING.ETQ$DOCUMENT_LINKS DOCUMENT_LINKS ON (TEST_TEMPLATE_LINK.TEST_TEMPLATE_ID = DOCUMENT_LINKS.LINK_ID)
LEFT JOIN
TRAINING.TEST_TEMPLATE ON (DOCUMENT_LINKS.DOCUMENT_ID = TEST_TEMPLATE.TEST_TEMPLATE_ID)
LEFT JOIN
TRAINING.TEST_DOCUMENT TEST_DOCUMENT ON (TEST_TEMPLATE.TEST_TEMPLATE_ID = TEST_DOCUMENT.TEST_TEMPLATE)
WHERE TEST_DOCUMENT_DATE IS NULL)
【问题讨论】:
-
当您说“我的新系统不接受嵌套/子查询”时,这是什么意思?你有错误吗?还是这是一个政治问题而不是技术问题?
-
另外,由于我们不了解业务规则、数据和访问路径,我们很难重写其他人的查询。
-
这是 Oracle 还是 MySQL?它们不一样,语法也不同。请正确标记
-
test_document_date 属于哪个表?即在您使用
WHERE test_document_date IS NULL的子查询中,但没有任何内容表明它属于哪个表。您可以尝试更改 where 子句以使用 NOT EXISTS 而不是 NOT IN -
请扶好你的马。这更像是一种政治局势 :) 我不是要求重写,只是给我一个方法,以便我可以工作。
标签: mysql sql subquery left-join