เป็นไปได้ไหมที่จะเขียนแบบสอบถามเข้าร่วมโดยไม่มีON
คำสั่ง? และการเชื่อมเหล่านี้แตกต่างกันLEFT JOIN, RIGHT JOIN
อย่างไร
เป็นไปได้ไหมที่จะเขียนแบบสอบถามเข้าร่วมโดยไม่มีON
คำสั่ง? และการเชื่อมเหล่านี้แตกต่างกันLEFT JOIN, RIGHT JOIN
อย่างไร
คำตอบ:
เอกสาร MySQL ครอบคลุมหัวข้อนี้
นี่คือเรื่องย่อ เมื่อมีการใช้join
หรือinner join
ที่on
สภาพเป็นตัวเลือก ซึ่งแตกต่างจากมาตรฐาน ANSI และแตกต่างจากฐานข้อมูลอื่น ๆ เกือบทั้งหมด ผลกระทบคือcross join
. ในทำนองเดียวกันคุณสามารถใช้on
อนุประโยคcross join
ซึ่งแตกต่างจาก SQL มาตรฐานได้เช่นกัน
การรวมแบบไขว้จะสร้างผลิตภัณฑ์คาร์ทีเซียนนั่นคือทุกชุดที่เป็นไปได้ของ 1 แถวจากตารางแรกและ 1 แถวจากตารางที่สอง ไม้กางเขนรวมกันสำหรับตารางที่มีสามแถว ('a', 'b' และ 'c') และตารางที่มีสี่แถว (พูด 1, 2, 3, 4) จะมี 12 แถว
ในทางปฏิบัติหากคุณต้องการทำการรวมข้ามให้ใช้cross join
:
from A cross join B
ดีกว่ามาก:
from A, B
และ:
from A join B -- with no on clause
on
ข้อเป็นสิ่งจำเป็นสำหรับสิทธิหรือด้านนอกซ้ายเข้าร่วมเพื่อให้การอภิปรายไม่เกี่ยวข้องกับพวกเขา
หากคุณต้องการทำความเข้าใจเกี่ยวกับการรวมประเภทต่างๆคุณจำเป็นต้องศึกษาเกี่ยวกับฐานข้อมูลเชิงสัมพันธ์ Stackoverflow ไม่ใช่สถานที่ที่เหมาะสมสำหรับการสนทนาระดับนั้น
ดูตัวอย่างบางส่วนในhttp://www.sitepoint.com/underunder-sql-joins-mysql-database/
คุณสามารถใช้ 'USING' แทน 'ON' ได้เช่นเดียวกับในแบบสอบถาม
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ON
ประโยคจะบอกเซิร์ฟเวอร์ว่าตารางเกี่ยวข้องกันอย่างไรไม่ หากการเข้าร่วมประเภทต่างๆของคุณทั้งหมดให้ผลลัพธ์เหมือนกันว่าคุณทำผิดอย่างใดและการเพิ่มโค้ดบางส่วนอาจช่วยให้เราทราบปัญหาของคุณได้ ในช่วงเวลาดังกล่าวให้ไปที่บล็อกของ Jeff Atwoodเป็นเวลา 2 นาทีเพื่อแนะนำประเภทการเข้าร่วมต่างๆ