שאלה לגבי מכפלה קרטזית ב-MySQL

שאלה לגבי מכפלה קרטזית ב-MySQL

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

רציתי לשאול אם ביצוע שאילתא שאתאר למטה אפשרית או שאמורה לגרור לשגיאה?
בעיקרון בדקתי באתר ברשת וזה הראה לי שגיאה אבל משום מה אני זוכר מהלימודים שלי שזה כן אמור לעבוד.

נניח ויש לי טבלת Orders בעלת השדות הבאים:
OrderID, CustomerID, OrderDate

וטבלה נוספת Customers בעלת השדות הבאים:
CustomerID, CustomerName, ContactName


האם השאילתא למטה תעבוד:

קוד:
SELECT Orders.OrderID, , Orders.OrderDate, Customers.CustomerName Customers.Country
FROM Orders,Customers

אולי חשוב לציין שאם אני רושם שאילתא ממש דומה, פשוט בלי ה- Customers.ContactName הכל עובד.

תודה!
 

BravoMan

Active member
לא כתבת מה השגיאה...

לפי מה שאני רואה שהעתקת לפורום, יש לך פסיק מיותר אחרי Orders.OrderID, וחסר לך פסיק בין CustomerName ו-Country מה שמייצר סינטקס לא חוקי בשאילתה.
&nbsp
אני לא יודע אם זה משהו שהשתבש בהעתקה לפורום, אבל אם זו בדיוק השאילתה שניסית, זה יסביר למה הסרה של אחד השדות שחסר בניהם פסיק תיקנה את התקלה.
&nbsp
בכל מקרה, לא ברור מה הקשר ל-"מכפלה קרטזית".
בשפת ה-DB מה שאתה מנסה לעשות נקרא JOIN.
 
פשוט לא העתקתי נכון אך השאילתא לא עובדת

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

 

BravoMan

Active member
אני חושב שצירפת פלט לא נכון...

בתמונה שלך רואים תוצאה נכונה של שאילת, ולא רואים שום הודעת שגיאה...
 
האמת שצילמתי מה שתכננתי

רק שבגלל שהתשובה לא בטבלה אז לא שמתי לב שהתשובה היא באמת רלציה ולא איזה הודעת שגיאה לא ברורה :(
סורי על הטעות ותודה על העזרה.
בעיקרון רציתי לשאול, במידה ועושים שאילתא ללא תנאי בין שני טבלאות בעלות שדה משותף, ואז מבקשים בתשובה לקבל את השדה המשותף מכל אחד מהטבלאות. האם מצב כזה גורר שגיאה?
 

BravoMan

Active member
SQL זה לא הצד החזק שלי, אבל מה זאת אומרת

"שדה משותף"?
מה עושה אותו למשותף - שיש לו אותו שם?
&nbsp
בשביל זה יש לך את הסינטקס עם נקודה, שמאפשר לציין שם עמודה יחד עם הטבלה שהיא שייכת אליה, כמו שעושים לאיברים של מחלקות ומבני נתונים בשפות תכנות.
&nbsp
כך יש לך "namespace" ואין בעיה עם שמות שדה זהים.
 
כן בהחלט אשתמש בשם הטבלה לפני שם השדה

אבל, מצב כזה יגרור שבתשובה אמורים להופיע 2 שדות עם שם זהה..
אולי צריך להשתמש ב-AS כדי למנוע שגיאה?
לדוגמא: Customers.CustomerID as something1
Orders.CustomerID as something2
 

Guy Yafe

New member
לדעתי השאילתה לא תעבור

ותוחזר שגיאה
אתה צריך להפריד בין השדות על ידי שם הטבלה.
 
יש לך בעיות בפסיקים

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