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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 4 כותבים 193 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום