2017-06-29 5 views
0

新しいシステムでネスト/サブクエリを受け付けていません。私はSQLの下で通常の結合に変換する際に助けが必要です。私は私のアプローチを試みたが、結果は同じではありません。ネストされたようWHERE句のSUBQUERYをNORMAL JOINに変更する

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) 
+0

「新しいシステムではネスト/サブクエリを受け入れていません。間違いはありますか?それとも技術的な問題ではなく政治的な問題ですか? – APC

+0

また、ビジネスルール、データ、アクセスパスを理解していないため、他の人のクエリを書き直すのはかなり難しいです。 – APC

+2

これはOracleかMySQLですか?それらは同じではなく、構文が異なります。正しくタグ付けしてください –

答えて

0

With句カウントしていますか?これはあなたの痛みを伴う制限で役に立たないのであれば、私はWITH理解

WITH UNWANTED AS(
    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 
) 
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) 
LEFT JOIN UNWANTED UNW on UNW.COURSE_PROFILE_ID = COURSE_PROFILE.COURSE_PROFILE_ID 
WHERE PHASE_SETTINGS.PHASE_TYPE IN (5) 
AND UNW.COURSE_PROFILE_ID IS NULL; 

は、ネストされたサブクエリのオプションの周りの仕事は、私は申し訳ありませんです。

UPDATE:

OKのは、この方法を試してみましょう、基本的には上記と同じロジックを適用しますが、サブクエリで、今私はあなたが最初の場所で探していたものです信じて、あなたのメインSELECT、と統合:

私はそれがメインクエリから COURSE_PROFILEと競合しない、とオリジナルのサブクエリから列 TEST_DOCUMENT_DATEので、添付の表の別名を持っていなかった COURSE_PROFILE_2に、元のネストされたクエリから COURSE_PROFILEのエイリアスを変更することを
SELECT * 
FROM TRAINING.COURSE_SCHEDULE AS COURSE_SCHEDULE 
LEFT JOIN ENGINE.PHASE_SETTINGS AS 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 AS ETQ$COURSE_SCHEDULE_ASN_1 ON (COURSE_SCHEDULE.COURSE_SCHEDULE_ID = ETQ$COURSE_SCHEDULE_ASN_1.COURSE_SCHEDULE_ID) 
LEFT JOIN ENGINE.USER_SETTINGS AS USER_SETTINGS_1 ON (ETQ$COURSE_SCHEDULE_ASN_1.ETQ$ASSIGNED = USER_SETTINGS_1.USER_ID) 
LEFT JOIN ENGINE.BOOLEAN_VALUES AS BOOLEAN_VALUES_1 ON (COURSE_SCHEDULE.TEST_IS_REQUIRED = BOOLEAN_VALUES_1.VALUE) 
LEFT JOIN TRAINING.COURSE_PROFILE AS COURSE_PROFILE_2 ON COURSE_PROFILE_2.COURSE_PROFILE_ID = COURSE_PROFILE.COURSE_PROFILE_ID 
LEFT JOIN TRAINING.ETQ$COURSE_PROFILE_TTL AS TEST_TEMPLATE_LINK ON (COURSE_PROFILE_2.COURSE_PROFILE_ID = TEST_TEMPLATE_LINK.COURSE_PROFILE_ID) 
LEFT JOIN TRAINING.ETQ$DOCUMENT_LINKS AS 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 AS TEST_DOCUMENT ON (TEST_TEMPLATE.TEST_TEMPLATE_ID = TEST_DOCUMENT.TEST_TEMPLATE 
                 AND TEST_DOCUMENT.TEST_DOCUMENT_DATE IS NULL) 
WHERE PHASE_SETTINGS.PHASE_TYPE IN (5) 
AND COURSE_PROFILE_2.COURSE_PROFILE_ID IS NULL; 

注意、私はinfeそれがTEST_DOCUMENTテーブルに属していた名前から削除してください。間違っている場合は変更してください。がんばろう。

+0

これは実際に優れています。私にこれを試すためにしばらくお待ちください:) –

+0

残念ながら同じSQL内の2つのSELECTステートメントと同じエラーが拒否されました。もう一度チェックしていただきありがとうございます –

+0

問題ありません。新しいアプローチで試してみました。あなたはしてください。 –

関連する問題