דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. SQL | שאילתת JOIN עם מופע אחרון בטבלה שניה

SQL | שאילתת JOIN עם מופע אחרון בטבלה שניה

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 4 כותבים 193 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • WWWW מנותק
    WWWW מנותק
    WWW
    כתב ב נערך לאחרונה על ידי WWW
    #1

    יש לי 2 טבלאות:

    1. לקוחות: מזהה | טלפון | פרטים_נוספים
    2. לוג: ID | מזהה_לקוח | תאריך

    אני צריך שאילתה שתחזיר את כל הלקוחות עם טלפון מסויים, + עמודה שתציג לי את התאריך האחרון מטבלת לוג.
    ‏

    WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

    WWWW תגובה 1 תגובה אחרונה
    0
    • WWWW WWW

      יש לי 2 טבלאות:

      1. לקוחות: מזהה | טלפון | פרטים_נוספים
      2. לוג: ID | מזהה_לקוח | תאריך

      אני צריך שאילתה שתחזיר את כל הלקוחות עם טלפון מסויים, + עמודה שתציג לי את התאריך האחרון מטבלת לוג.
      ‏

      WWWW מנותק
      WWWW מנותק
      WWW
      כתב ב נערך לאחרונה על ידי
      #2

      @www עשיתי לפי זה:
      https://stackoverflow.com/questions/3619030/mysql-join-the-most-recent-row-only/3619209#3619209
      בינתיים נראה שזה עובד טוב, השאלה אם יש משהו יותר יעיל.

      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

      clickoneC תגובה 1 תגובה אחרונה
      0
      • WWWW WWW

        @www עשיתי לפי זה:
        https://stackoverflow.com/questions/3619030/mysql-join-the-most-recent-row-only/3619209#3619209
        בינתיים נראה שזה עובד טוב, השאלה אם יש משהו יותר יעיל.

        clickoneC מנותק
        clickoneC מנותק
        clickone
        כתב ב נערך לאחרונה על ידי clickone
        #3

        @www לדעתי תלוי כמה רשומות אתה מחזיר.
        ז"א, אם אתה מחזיר רשומה אחת, (נניח אתה רוצה לקבל את הלוג האחרון רק ללקוח ספציפי) אז אין הבדל בכל שיטה שתבחר.
        אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.
        אני חושב שזה יותר זריז ויעיל.

        דבר נוסף, אם מדובר בממש הרבה נתונים, (אני מדבר על כמויות מאד מאד גדולות - בעיקר בטבלת הלוג) , וחשוב לך מאד המהירות תגובה, אתה יכול לשמור את התאריך של הלוג האחרון כנתון סטטי בטבלת הלקוחות (אפשרי גם עם טריגר)
        זה מאד לא נכון מבחינה "חוקית", אבל אם יש לך שיקול של מהירות ייתכן שזה עדיף. (שוב, רק במידה ואתה רואה שיש לך עיכוב מאד גדול - זה קורה בד"כ כשיש ממש טון רשומות)

        אין טסט כמו פרודקשן.

        המייל שלי urivpn@gmail.com

        WWWW dovidD 2 תגובות תגובה אחרונה
        4
        • clickoneC clickone

          @www לדעתי תלוי כמה רשומות אתה מחזיר.
          ז"א, אם אתה מחזיר רשומה אחת, (נניח אתה רוצה לקבל את הלוג האחרון רק ללקוח ספציפי) אז אין הבדל בכל שיטה שתבחר.
          אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.
          אני חושב שזה יותר זריז ויעיל.

          דבר נוסף, אם מדובר בממש הרבה נתונים, (אני מדבר על כמויות מאד מאד גדולות - בעיקר בטבלת הלוג) , וחשוב לך מאד המהירות תגובה, אתה יכול לשמור את התאריך של הלוג האחרון כנתון סטטי בטבלת הלקוחות (אפשרי גם עם טריגר)
          זה מאד לא נכון מבחינה "חוקית", אבל אם יש לך שיקול של מהירות ייתכן שזה עדיף. (שוב, רק במידה ואתה רואה שיש לך עיכוב מאד גדול - זה קורה בד"כ כשיש ממש טון רשומות)

          WWWW מנותק
          WWWW מנותק
          WWW
          כתב ב נערך לאחרונה על ידי WWW
          #4

          @clickone אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

          @www לדעתי תלוי כמה רשומות אתה מחזיר.
          ז"א, אם אתה מחזיר רשומה אחת, (נניח אתה רוצה לקבל את הלוג האחרון רק ללקוח ספציפי) אז אין הבדל בכל שיטה שתבחר.

          אני מחזיר רשומות בודדות בסוף. 1 - 10

          אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.
          אני חושב שזה יותר זריז ויעיל.

          דבר נוסף, אם מדובר בממש הרבה נתונים, (אני מדבר על כמויות מאד מאד גדולות - בעיקר בטבלת הלוג) , וחשוב לך מאד המהירות תגובה, אתה יכול לשמור את התאריך של הלוג האחרון כנתון סטטי בטבלת הלקוחות (אפשרי גם עם טריגר)

          הלוג מכיל כרגע 576072 רשומות, בקטנה...

          זה מאד לא נכון מבחינה "חוקית", אבל אם יש לך שיקול של מהירות ייתכן שזה עדיף. (שוב, רק במידה ואתה רואה שיש לך עיכוב מאד גדול - זה קורה בד"כ כשיש ממש טון רשומות)

          אין עיכוב בינתיים.

          WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

          תגובה 1 תגובה אחרונה
          2
          • clickoneC clickone

            @www לדעתי תלוי כמה רשומות אתה מחזיר.
            ז"א, אם אתה מחזיר רשומה אחת, (נניח אתה רוצה לקבל את הלוג האחרון רק ללקוח ספציפי) אז אין הבדל בכל שיטה שתבחר.
            אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.
            אני חושב שזה יותר זריז ויעיל.

            דבר נוסף, אם מדובר בממש הרבה נתונים, (אני מדבר על כמויות מאד מאד גדולות - בעיקר בטבלת הלוג) , וחשוב לך מאד המהירות תגובה, אתה יכול לשמור את התאריך של הלוג האחרון כנתון סטטי בטבלת הלקוחות (אפשרי גם עם טריגר)
            זה מאד לא נכון מבחינה "חוקית", אבל אם יש לך שיקול של מהירות ייתכן שזה עדיף. (שוב, רק במידה ואתה רואה שיש לך עיכוב מאד גדול - זה קורה בד"כ כשיש ממש טון רשומות)

            dovidD מנותק
            dovidD מנותק
            dovid
            ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            @clickone אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

            אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.

            זה אכן מה שצריך לעשות, ומה שבstackoverflow הציעו אחרת זה בגלל ששמה התבקשו להגיע לעוד נתונים של השורה הזו מה שלא יתאפשר ע"י MAX.

            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
            WWWW תגובה 1 תגובה אחרונה
            2
            • dovidD dovid

              @clickone אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

              אם זה מחזיר הרבה תוצאות, הייתי משתמש בLEFT JOIN רגיל, ועושה GROUP BY על התוצאה, ומבקש MAX על השדה של תאריך הלוג.

              זה אכן מה שצריך לעשות, ומה שבstackoverflow הציעו אחרת זה בגלל ששמה התבקשו להגיע לעוד נתונים של השורה הזו מה שלא יתאפשר ע"י MAX.

              WWWW מנותק
              WWWW מנותק
              WWW
              כתב ב נערך לאחרונה על ידי
              #6

              @dovid אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

              זה אכן מה שצריך לעשות, ומה שבstackoverflow הציעו אחרת זה בגלל ששמה התבקשו להגיע לעוד נתונים של השורה הזו מה שלא יתאפשר ע"י MAX.

              אתה מתכוון עוד נתונים מהטבלה הראשונה או השנייה?
              לא הצלחתי להבין למה זה יותר חסכוני, למה לא עדיף לסנן את השורות לפני הJOIN ולחסוך אלפי שורות מיותרות מהטבלה הראשונה?

              WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

              dovidD תגובה 1 תגובה אחרונה
              0
              • WWWW WWW

                @dovid אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

                זה אכן מה שצריך לעשות, ומה שבstackoverflow הציעו אחרת זה בגלל ששמה התבקשו להגיע לעוד נתונים של השורה הזו מה שלא יתאפשר ע"י MAX.

                אתה מתכוון עוד נתונים מהטבלה הראשונה או השנייה?
                לא הצלחתי להבין למה זה יותר חסכוני, למה לא עדיף לסנן את השורות לפני הJOIN ולחסוך אלפי שורות מיותרות מהטבלה הראשונה?

                dovidD מנותק
                dovidD מנותק
                dovid
                ניהול
                כתב ב נערך לאחרונה על ידי dovid
                #7

                @www באופן כללי בSQL אתה תמיד אומר מה שאתה רוצה, ומאמין שהוא עושה את זה טוב. (הפקפוקים צריכים לבוא רק כשהמקרה שלך לא קלאסי או כשבדיעבד המציאות "חורקת").
                אתה יכול להיות רגוע, אתה יכול לבדוק ולראות שהדרך שאמרנו מהירה יותר מסינון מוקדם.
                הסינון המקודם כופה על השרת דרך שנראית לך טובה יותר, ועלולה שלא לתת לו לבחור דרכים טובות מזו. לפעמים חייבים לכפות דרך או בגלל שיודעים מראש שהדרך בה השרת יבחר היא שגויה, או כי זה ההתנסחות היחידה שמביאה את התוצאה הרצויה כמו מה שקרה שם בSO.

                @www אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

                אתה מתכוון עוד נתונים מהטבלה הראשונה או השנייה?

                מהשניה. הם רצו לאתר בטבלה השניה את השורה שבשדה X היא המקסימום, ומאותה שורה לקחת עוד כמה שדות. במקרה כזה נדרש לעשות קוד מסורבל יותר מאשר במקרה שלך. המקרה שלך זו שאילתת קיבוץ קלאסית, וכמות השורות בה לא רלוונטי.

                • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                dovidD תגובה 1 תגובה אחרונה
                5
                • dovidD dovid

                  @www באופן כללי בSQL אתה תמיד אומר מה שאתה רוצה, ומאמין שהוא עושה את זה טוב. (הפקפוקים צריכים לבוא רק כשהמקרה שלך לא קלאסי או כשבדיעבד המציאות "חורקת").
                  אתה יכול להיות רגוע, אתה יכול לבדוק ולראות שהדרך שאמרנו מהירה יותר מסינון מוקדם.
                  הסינון המקודם כופה על השרת דרך שנראית לך טובה יותר, ועלולה שלא לתת לו לבחור דרכים טובות מזו. לפעמים חייבים לכפות דרך או בגלל שיודעים מראש שהדרך בה השרת יבחר היא שגויה, או כי זה ההתנסחות היחידה שמביאה את התוצאה הרצויה כמו מה שקרה שם בSO.

                  @www אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

                  אתה מתכוון עוד נתונים מהטבלה הראשונה או השנייה?

                  מהשניה. הם רצו לאתר בטבלה השניה את השורה שבשדה X היא המקסימום, ומאותה שורה לקחת עוד כמה שדות. במקרה כזה נדרש לעשות קוד מסורבל יותר מאשר במקרה שלך. המקרה שלך זו שאילתת קיבוץ קלאסית, וכמות השורות בה לא רלוונטי.

                  dovidD מנותק
                  dovidD מנותק
                  dovid
                  ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  הכי טוב זה לבדוק בעצמך את ההבדל, הייתי כותב לך את שני השאילתות אבל אין לי את השמות וגם לא ציינת אם מדובר בMYSQL או MSSQL (משנה טיפה בסינטקס).
                  אני מצרף קישורים כדי שתנוח דעתך:
                  https://stackoverflow.com/questions/14164784/mysql-using-group-by-vs-subselect-in-columns-list
                  https://stackoverflow.com/questions/3156090/which-is-faster-join-with-group-by-or-a-subquery

                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                  WWWW 2 תגובות תגובה אחרונה
                  2
                  • dovidD dovid

                    הכי טוב זה לבדוק בעצמך את ההבדל, הייתי כותב לך את שני השאילתות אבל אין לי את השמות וגם לא ציינת אם מדובר בMYSQL או MSSQL (משנה טיפה בסינטקס).
                    אני מצרף קישורים כדי שתנוח דעתך:
                    https://stackoverflow.com/questions/14164784/mysql-using-group-by-vs-subselect-in-columns-list
                    https://stackoverflow.com/questions/3156090/which-is-faster-join-with-group-by-or-a-subquery

                    WWWW מנותק
                    WWWW מנותק
                    WWW
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @dovid תודה רבה!
                    מדובר ב MYSQL, ואני מאמין לך אל תדאג, רק חיפשתי הסבר, ושכחתי מהתורה הזאת שSQL זו שפת תוצאות...
                    עכשיו אני מבין, אבדוק את זה.

                    WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                    א תגובה 1 תגובה אחרונה
                    3
                    • dovidD dovid

                      הכי טוב זה לבדוק בעצמך את ההבדל, הייתי כותב לך את שני השאילתות אבל אין לי את השמות וגם לא ציינת אם מדובר בMYSQL או MSSQL (משנה טיפה בסינטקס).
                      אני מצרף קישורים כדי שתנוח דעתך:
                      https://stackoverflow.com/questions/14164784/mysql-using-group-by-vs-subselect-in-columns-list
                      https://stackoverflow.com/questions/3156090/which-is-faster-join-with-group-by-or-a-subquery

                      WWWW מנותק
                      WWWW מנותק
                      WWW
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @dovid אתה צודק ובגדול!
                      זה לוקח חצי מהזמן! זה מורגש.

                      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                      תגובה 1 תגובה אחרונה
                      2
                      • WWWW WWW

                        @dovid תודה רבה!
                        מדובר ב MYSQL, ואני מאמין לך אל תדאג, רק חיפשתי הסבר, ושכחתי מהתורה הזאת שSQL זו שפת תוצאות...
                        עכשיו אני מבין, אבדוק את זה.

                        א מנותק
                        א מנותק
                        ארכיטקט
                        כתב ב נערך לאחרונה על ידי
                        #11

                        @www אמר בSQL | שאילתת JOIN עם מופע אחרון בטבלה שניה:

                        שפת תוצאות

                        הנכון: שפה הצהרתית (דקלרטיבית)
                        רוצה לומר: אתה מצהיר שאלו התוצאות שאתה רוצה והוא צריך "לשבור את הראש" איך להביא לך אותם.

                        אגב מסורת מקובלת מגדולי ה DBA (מ.ד. מהר נוף, למי שמכיר) תמיד לעשות פרוצדורות, ולא שאילתות זה מאפשר לדטה בייס הרבה יותר תיכנון ואופטימיזצה.
                        כמו"כ בפרוצדורה (וגם בסקריפט) אני אישית לא חושש להשתמש בטבלאות זמניות, אפילו עם אינדקסים בתוך הטבלה הזמנית, כדי "לעזור" למנוע וגם למפתח עם שאילתות מורכבות. בטבלאות זמניות אתה יכול לעשות כבתוך שלך (כגון להניף דגלים, לצבוע שורות וכדומה) בלי "לטנף" את הדטה בייס. אבל ברור שכל מקרה לגופו ואין בזה שום כללים.

                        אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                        תגובה 1 תגובה אחרונה
                        2
                        תגובה
                        • תגובה כנושא
                        התחברו כדי לפרסם תגובה
                        • מהישן לחדש
                        • מהחדש לישן
                        • הכי הרבה הצבעות


                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום