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

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

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

איך עושים JOIN?

מתוזמן נעוץ נעול הועבר תכנות
56 פוסטים 4 כותבים 755 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN מנותק
    nigunN מנותק
    nigun
    השיב לOdedDvir ב נערך לאחרונה על ידי
    #7

    @OdedDvir
    א. בMYSQL לא עובד TOP
    אז השתמשתי בLIMIT.
    וזה אכן עבד.
    ב. הורדתי את הלימיט והשאילתא עבדה
    מה ההבדל בין השאילתות?

    מייל: nigun@duck.com

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לnigun ב נערך לאחרונה על ידי
      #8

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

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

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

      nigunN תגובה 1 תגובה אחרונה
      0
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #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
        • nigunN מנותק
          nigunN מנותק
          nigun
          השיב לOdedDvir ב נערך לאחרונה על ידי
          #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
            • OdedDvirO מנותק
              OdedDvirO מנותק
              OdedDvir
              השיב לnigun ב נערך לאחרונה על ידי 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
              • nigunN מנותק
                nigunN מנותק
                nigun
                השיב לOdedDvir ב נערך לאחרונה על ידי nigun
                #13

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

                מייל: nigun@duck.com

                OdedDvirO nigunN 2 תגובות תגובה אחרונה
                0
                • OdedDvirO מנותק
                  OdedDvirO מנותק
                  OdedDvir
                  השיב לnigun ב נערך לאחרונה על ידי 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 מנותק
                    nigunN מנותק
                    nigun
                    השיב לnigun ב נערך לאחרונה על ידי
                    #15

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

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

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

                    מייל: nigun@duck.com

                    OdedDvirO תגובה 1 תגובה אחרונה
                    0
                    • nigunN מנותק
                      nigunN מנותק
                      nigun
                      השיב לOdedDvir ב נערך לאחרונה על ידי
                      #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
                        • nigunN מנותק
                          nigunN מנותק
                          nigun
                          השיב לdovid ב נערך לאחרונה על ידי
                          #18

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

                          מייל: nigun@duck.com

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            השיב לnigun ב נערך לאחרונה על ידי
                            #19

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

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            1
                            • OdedDvirO מנותק
                              OdedDvirO מנותק
                              OdedDvir
                              השיב לnigun ב נערך לאחרונה על ידי
                              #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
                                • OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  השיב לnigun ב נערך לאחרונה על ידי
                                  #22

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

                                  dovidD תגובה 1 תגובה אחרונה
                                  2
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    השיב לOdedDvir ב נערך לאחרונה על ידי dovid
                                    #23

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

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    4
                                    • dovidD מנותק
                                      dovidD מנותק
                                      dovid ניהול
                                      השיב לOdedDvir ב נערך לאחרונה על ידי
                                      #24

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

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

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

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      OdedDvirO תגובה 1 תגובה אחרונה
                                      2
                                      • OdedDvirO מנותק
                                        OdedDvirO מנותק
                                        OdedDvir
                                        השיב לdovid ב נערך לאחרונה על ידי OdedDvir
                                        #25

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

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

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

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

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

                                        dovidD nigunN 2 תגובות תגובה אחרונה
                                        1
                                        • dovidD מנותק
                                          dovidD מנותק
                                          dovid ניהול
                                          השיב לOdedDvir ב נערך לאחרונה על ידי
                                          #26

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

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

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

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

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

                                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                          OdedDvirO תגובה 1 תגובה אחרונה
                                          3

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

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

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