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

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

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

איך עושים JOIN?

מתוזמן נעוץ נעול הועבר תכנות
56 פוסטים 4 כותבים 757 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO OdedDvir

    @nigun אמר באיך עושים JOIN?:

    מה ההבדל בין השאילתות?

    לא הבנתי למה כוונתך

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

    @OdedDvir
    מה ההבדל בין

    SELECpoints.user ,points.points FROM points JOIN info ON info.user=points.user
    

    לבין

    SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
    

    מייל: nigun@duck.com

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO OdedDvir

      @nigun ייתכן שסוג הנתונים של מחרוזת בשילוב עם מספר הרשומות הגדול יוצר מעמסה.
      ראשית, הייתי מנסה לבצע את הJoin על קבוצה קטנה, למשל ה-1000 הראשונים מכל טבלה ולראות אם נתקע:

      SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
      

      בטבלת points יש 371574 שורות
      בטבלת info יש 29542 שורות.

      לפי הנתונים, מספר הרשומות האפשריות בJoin הוא 371K * 29K = 10,759,000,000!
      לפי סדר הריצה כנראה הDB מבצע JOIN ואח"כ מסנן.
      אם אתה צריך רק קבוצה מסויימת, תסנן את שתי הטבלאות לפני הJOIN

      עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

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

      @OdedDvir אמר באיך עושים JOIN?:

      עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

      שניה, פעם ראשונה שאני עושה JOIN
      אני עדיין מנסה להבין איך זה עובד?

      מייל: nigun@duck.com

      תגובה 1 תגובה אחרונה
      0
      • nigunN מנותק
        nigunN מנותק
        nigun
        כתב ב נערך לאחרונה על ידי
        #11

        יופי עכשיו השאילתא:

         SELECT P.user, P.points,I.nameText FROM (SELECT * FROM points ) AS P JOIN (SELECT * FROM userinfo ) AS I ON P.user=I.user and P.grup=123;
        

        מחזירה לי תוצאות תוך 6.58 שניות

        מייל: nigun@duck.com

        תגובה 1 תגובה אחרונה
        0
        • nigunN nigun

          @OdedDvir
          מה ההבדל בין

          SELECpoints.user ,points.points FROM points JOIN info ON info.user=points.user
          

          לבין

          SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
          
          OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          כתב ב נערך לאחרונה על ידי OdedDvir
          #12

          @nigun אמר באיך עושים JOIN?:

          מה ההבדל בין ...

          לכאורה אין הבדל:

          SELECT points.user, points.points FROM points JOIN info ON info.user=points.user 
          

          לבין (אם נוריד את ה TOP\LIMIT)

          SELECT points.user, points.points FROM points JOIN userinfo ON points.user=userinfo.user;
          

          אינני יודע, אך אולי ב MYSQL הסדר של ה ON משנה וצריך לרשום:

          ON points.user=info.user 
          

          ולא

          ON info.user=points.user
          
          nigunN תגובה 1 תגובה אחרונה
          0
          • OdedDvirO OdedDvir

            @nigun אמר באיך עושים JOIN?:

            מה ההבדל בין ...

            לכאורה אין הבדל:

            SELECT points.user, points.points FROM points JOIN info ON info.user=points.user 
            

            לבין (אם נוריד את ה TOP\LIMIT)

            SELECT points.user, points.points FROM points JOIN userinfo ON points.user=userinfo.user;
            

            אינני יודע, אך אולי ב MYSQL הסדר של ה ON משנה וצריך לרשום:

            ON points.user=info.user 
            

            ולא

            ON info.user=points.user
            
            nigunN מנותק
            nigunN מנותק
            nigun
            כתב ב נערך לאחרונה על ידי nigun
            #13

            @OdedDvir
            בשניהם זה נתקע.
            אולי אני ישאיר את זה לחצי שעה
            ונראה מתי זה מצליח להביא את התוצאות בסוף.

            מייל: nigun@duck.com

            OdedDvirO nigunN 2 תגובות תגובה אחרונה
            0
            • nigunN nigun

              @OdedDvir
              בשניהם זה נתקע.
              אולי אני ישאיר את זה לחצי שעה
              ונראה מתי זה מצליח להביא את התוצאות בסוף.

              OdedDvirO מנותק
              OdedDvirO מנותק
              OdedDvir
              כתב ב נערך לאחרונה על ידי OdedDvir
              #14

              @nigun אמר באיך עושים JOIN?:

              אולי אני ישאיר את זה לחצי שעה

              אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

              SELECT P.user, P.points,I.nameText
              FROM (SELECT * FROM points WHERE points.grup=123) AS P
              JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
              ON P.user=I.user; 
              
              nigunN תגובה 1 תגובה אחרונה
              2
              • nigunN nigun

                @OdedDvir
                בשניהם זה נתקע.
                אולי אני ישאיר את זה לחצי שעה
                ונראה מתי זה מצליח להביא את התוצאות בסוף.

                nigunN מנותק
                nigunN מנותק
                nigun
                כתב ב נערך לאחרונה על ידי
                #15

                @nigun אמר באיך עושים JOIN?:

                @OdedDvir
                בשניהם זה נתקע.
                אולי אני ישאיר את זה לחצי שעה
                ונראה מתי זה מצליח להביא את התוצאות בסוף.

                בדקתי עכשיו
                ואני רואה שהבקשה ארכה 31 דקות!!!!
                מעניין מה ההבדל?

                מייל: nigun@duck.com

                OdedDvirO תגובה 1 תגובה אחרונה
                0
                • OdedDvirO OdedDvir

                  @nigun אמר באיך עושים JOIN?:

                  אולי אני ישאיר את זה לחצי שעה

                  אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

                  SELECT P.user, P.points,I.nameText
                  FROM (SELECT * FROM points WHERE points.grup=123) AS P
                  JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
                  ON P.user=I.user; 
                  
                  nigunN מנותק
                  nigunN מנותק
                  nigun
                  כתב ב נערך לאחרונה על ידי
                  #16

                  @OdedDvir אמר באיך עושים JOIN?:

                  @nigun אמר באיך עושים JOIN?:

                  אולי אני ישאיר את זה לחצי שעה

                  אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

                  SELECT P.user, P.points,I.nameText
                  FROM (SELECT * FROM points WHERE points.grup=123) AS P
                  JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
                  ON P.user=I.user; 
                  

                  יפה
                  עכשיו זה ירד ל0.23 שניות.

                  מייל: nigun@duck.com

                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD מנותק
                    dovidD מנותק
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי
                    #17

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

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

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

                      nigunN מנותק
                      nigunN מנותק
                      nigun
                      כתב ב נערך לאחרונה על ידי
                      #18

                      @dovid
                      אז מה השתבש אצלי?

                      מייל: nigun@duck.com

                      dovidD תגובה 1 תגובה אחרונה
                      0
                      • nigunN nigun

                        @dovid
                        אז מה השתבש אצלי?

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

                        @nigun זה מה שאני שואל את עצמי לאורך כל האשכול.

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

                          @nigun אמר באיך עושים JOIN?:

                          @OdedDvir
                          בשניהם זה נתקע.
                          אולי אני ישאיר את זה לחצי שעה
                          ונראה מתי זה מצליח להביא את התוצאות בסוף.

                          בדקתי עכשיו
                          ואני רואה שהבקשה ארכה 31 דקות!!!!
                          מעניין מה ההבדל?

                          OdedDvirO מנותק
                          OdedDvirO מנותק
                          OdedDvir
                          כתב ב נערך לאחרונה על ידי
                          #20

                          @nigun אמר באיך עושים JOIN?:

                          מעניין מה ההבדל?

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

                          @dovid אמר באיך עושים JOIN?:

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

                          אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

                          dovidD תגובה 1 תגובה אחרונה
                          1
                          • nigunN מנותק
                            nigunN מנותק
                            nigun
                            כתב ב נערך לאחרונה על ידי
                            #21

                            בהמשך לשאלה הנ"ל
                            לפעמים יש משתמשים שלא רשומים ב userinfo
                            אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                            איך אני כותב את השאילתא?

                            מייל: nigun@duck.com

                            OdedDvirO תגובה 1 תגובה אחרונה
                            0
                            • nigunN nigun

                              בהמשך לשאלה הנ"ל
                              לפעמים יש משתמשים שלא רשומים ב userinfo
                              אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                              איך אני כותב את השאילתא?

                              OdedDvirO מנותק
                              OdedDvirO מנותק
                              OdedDvir
                              כתב ב נערך לאחרונה על ידי
                              #22

                              @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

                              dovidD תגובה 1 תגובה אחרונה
                              2
                              • OdedDvirO OdedDvir

                                @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

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

                                LEFT JOIN זה למקרה שאתה רוצה את כל השורות של הטבלה שצויינה ראשונה (שזה לשמאל הביטוי JOIN). למקרה הפוך יש RIGHT JOIN. הברירת מחדל היא INNER שזה רק הזהים, ויש את FULL שזה הכל משני הצדדים. בחלק ממסדי הנתונים האחרון לא נתמך.

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

                                  @nigun אמר באיך עושים JOIN?:

                                  מעניין מה ההבדל?

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

                                  @dovid אמר באיך עושים JOIN?:

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

                                  אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

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

                                  @OdedDvir אמר באיך עושים JOIN?:

                                  אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

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

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

                                    @OdedDvir אמר באיך עושים JOIN?:

                                    אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

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

                                    OdedDvirO מנותק
                                    OdedDvirO מנותק
                                    OdedDvir
                                    כתב ב נערך לאחרונה על ידי OdedDvir
                                    #25

                                    @dovid אמר באיך עושים JOIN?:

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

                                    אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

                                    מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

                                    מעניין לראות את תוכנית הריצה של השאילתא הארוכה. אם @nigun יוכל להראות אותה כאן (כמובן רק אם זה לא ידרוש שוב חצי שעה...)

                                    dovidD nigunN 2 תגובות תגובה אחרונה
                                    1
                                    • OdedDvirO OdedDvir

                                      @dovid אמר באיך עושים JOIN?:

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

                                      אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

                                      מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

                                      מעניין לראות את תוכנית הריצה של השאילתא הארוכה. אם @nigun יוכל להראות אותה כאן (כמובן רק אם זה לא ידרוש שוב חצי שעה...)

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

                                      @OdedDvir אמר באיך עושים JOIN?:

                                      @dovid אמר באיך עושים JOIN?:

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

                                      אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

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

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

                                        @OdedDvir אמר באיך עושים JOIN?:

                                        @dovid אמר באיך עושים JOIN?:

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

                                        אני עדיין אוחז ב"תגיד מה אתה רוצה ועדיין תדאג"...

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

                                        OdedDvirO מנותק
                                        OdedDvirO מנותק
                                        OdedDvir
                                        כתב ב נערך לאחרונה על ידי
                                        #27

                                        @dovid אמר באיך עושים JOIN?:

                                        זה לא נורמלי, במקרים רגילים אמורים להיות רגועים לחלוטין.

                                        אני משער שכך הוא בבסיסי נתונים מקצועיים.
                                        לצערי אני מגיע משדה הקרב של Access, שם Jet לא מגיע לרמות של אופטימיזציה כזו, נוכחתי לדעת ששאילתא שלקחה לי למעלה מ-4 דקות עם הרבה Join-ים הפכה ל-3 שניות כשסידרתי אותה מחדש (עם טבלאות זמניות וכו').

                                        נו, עוד מסמר בארון של אקסס...

                                        dovidD תגובה 1 תגובה אחרונה
                                        1
                                        • OdedDvirO OdedDvir

                                          @dovid אמר באיך עושים JOIN?:

                                          זה לא נורמלי, במקרים רגילים אמורים להיות רגועים לחלוטין.

                                          אני משער שכך הוא בבסיסי נתונים מקצועיים.
                                          לצערי אני מגיע משדה הקרב של Access, שם Jet לא מגיע לרמות של אופטימיזציה כזו, נוכחתי לדעת ששאילתא שלקחה לי למעלה מ-4 דקות עם הרבה Join-ים הפכה ל-3 שניות כשסידרתי אותה מחדש (עם טבלאות זמניות וכו').

                                          נו, עוד מסמר בארון של אקסס...

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

                                          @OdedDvir אני חושב שגם אקסס הוא בסדר יחסית. אתה מדבר על שאילות רציניות מאוד, והראיה שאתה מזכיר טבלאות זמניות.

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


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

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

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