14-10-2008, 23:35
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
ציטוט:
זוהי השאילתה המדוייקת או שהיא שונתה לצורך הצגתה כאן?
מה מופיע במקום שלושת הנקודות שממוסגרים בתנאי IN?
|
זוהי לא השאילתא המדויקת. שיניתי את שמות הטורים ושמות הטבלאות.
גם במקום שמות הטורים בפיסקת ה-SELECT, פשוט כתבתי כוכבית ( * ) כי זה לא נראה לי כ"כ רלונטי\משנה לכתוב את שמות הטורים.
במקום שלושת הנקודות יש מספרים (מספרי ה-id ששייכים לטור g.id) המופרדים עם פסיק.
לדוגמא:
קוד:
SELECT * FROM Grandpas g
INNER JOIN Fathers f (g.id=f.g_id)
INNER JOIN Sons s (f.id=s.f_id)
WHERE g.id IN (5,1,29,41)
MySQL טוען שיש לי שגיאה בחלק הבא בשאילתא:
קוד:
(g.id=f.g_id)
INNER JOIN Sons s (f.id=s.f_
ציטוט השגיאה עם שינוי שמות הטורים:
ציטוט:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(g.id=f.g_id)
INNER JOIN Sons s (f.id=s.f_' at line 2
|
אני יודע מדוע MySQL לא מסתדר עם השאילתא. זה בגלל שב-INNER JOIN השני (של Sons), בפיסקת ה-ON התייחסתי לטבלת Fathers במקום Grandpas, כפי שהייתי אמור לעשות.
השאילתא הנ"ל זה רק בשביל להציג את הרעיון מאחורי השאילתא האמיתית שאני רוצה לכתוב (אבל לא יודע איך...).
----------- רק עכשיו שמתי לב שחסרות לי 2 מילים שהן "ON", השייכים לפיסקת ה-ON... ---------
אני אוסיף עכשיו את המילים, אבדוק אם זה עובד ואחזור עם התוצאות....
עריכה:
אוקי זה עובד כמו שצריך.
לא יודע איך כ"כ הרבה זמן לא שמתי לב לחסרונן של 2 מילים...
אבל אם כבר פתחתי אשכול, לפחות שאבין למה השאילתא הנ"ל דוקא כן תקינה.
לפי מה שהבנתי, בגירסאות של MySQL מעל 5.0.1, כאשר משתמשים ב-JOIN כלשהו, הטורים בפיסקת ה-ON חייבים להתייחס רק לאופרנד שעליו מתבצעת הפעולה.
במקרה שלנו, הטורים בפיסקת ה-ON של טבלת Sons מתייחסים לטבלת Fathers (ולא ל-Grandpas) ולכן זה אמור להיות לא תקין ב-mysql>5.0.1...
נערך לאחרונה ע"י dorM בתאריך 15-10-2008 בשעה 00:04.
|