› פורומים › אפיון ופיתוח פריוריטי › LEFT JOIN ותנאי אחרי החיתוך בדו"חות
- This topic has 3 תגובות, 2 משתתפים, and was last updated לפני שנה 1, 8 חודשים by
yitzchok.
- Post
-
- מרץ 6, 2024 בשעה 9:03 pm
כאשר אני מוסיף תנאי לטבלה ב left join, התנאי עובד לפני החיתוך.איך מאלצים את המערכת לשים את התנאי (על STACK8.KEY2) ב where ולא ב on של החיתוך?
זה ה dump של הדו"ח
<p dir="ltr" style="direction: ltr; text-align: left;">SELECT STACK9.INTKEY AS 'INTKEY',
STACK9.CHARDATA AS 'CHARDATA',
STACK8.KEY2 AS 'KEY2',
STACK9.INTKEY AS 'INTKEY'
FROM STACK9 , STACK8 ?
WHERE (STACK9.INTKEY = STACK8.KEY1)
AND (STACK9.INTKEY > 2
AND STACK8.KEY2 = 1)
AND ( 1=1 )</p>
SQL שיוצא:
<p dir="ltr" style="text-align: left;">select demo.dbo.STACK9.INTKEY ,
demo.dbo.STACK9.CHARDATA ,
coalesce( demo.dbo.STACK8.KEY2 , 0 ) ,
demo.dbo.STACK9.INTKEYfrom demo.dbo.STACK9 left outer join demo.dbo.STACK8 on ( demo.dbo.STACK8.KEY2 = 1 ) and ( demo.dbo.STACK8.KEY1 = demo.dbo.STACK9.INTKEY )
where ( demo.dbo.STACK9.INTKEY > 2 ) and ( 1 = 1 )</p>
<p dir="ltr"></p>
<p dir="ltr"></p>-
הדיון הזה עודכן לפני שנה 1, 8 חודשים ע״י
HG.
- Replies
-
- מרץ 8, 2024 בשעה 8:40 am
מהתמונה שהצלחתי לבנות אצלי במשך השנים, אני חושב (אבל לא יכול להבטיח) שאם תשים במילוי של STACK8 את ה-1 גם בעמודה אחרת (שלא חלק מה-U) ותתנה עליה, התנאי יחול לאחר החיתוך ולא כחלק ממנו.[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 10, 2024 בשעה 10:11 am
וואו, עבד!הצליח גם עם עמודה אחת אם חזרתי על ההתניה פעמיים.
אם כי זה מרגיש לי כמגבלה של האופצימייזר ל SQL ולא כמשהו מכוון…
הערה- זה עובד רק שחוזרים על ההתניה פעם נוספת (שניה) בעמודה אחרת/נוספת כפי שיצחק כתב.
כאשר מורדים את ההתניה הישירה (על stack8.key2) ונשארים רק עם התניה יחידה ("נוספת") זה לא עובד.
- מרץ 12, 2024 בשעה 10:07 am
הנושא הזה מעורפל אצלי גםלפעמים אני חושב שזה עניין של עמודה מול עמודה (ולא ערך קבוע או ביטוי)
לפעמים אני חושב שזה עניין של עמודות שבמפתח U
ולא חקרתי עד שיהיה מספיק ברור לי וסיכמתי בכתב, וחבל
יכול להיות שאפשר להגיע למסקנה משאלות שנענו בהצלחה כאן בפורום
אני שמח שמצאת פתרון
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
- יש להתחבר למערכת על מנת להגיב.