จะใช้ mysql JOIN โดยไม่มีเงื่อนไขได้อย่างไร?


106

เป็นไปได้ไหมที่จะเขียนแบบสอบถามเข้าร่วมโดยไม่มีONคำสั่ง? และการเชื่อมเหล่านี้แตกต่างกันLEFT JOIN, RIGHT JOINอย่างไร


1
เนื่องจากONประโยคจะบอกเซิร์ฟเวอร์ว่าตารางเกี่ยวข้องกันอย่างไรไม่ หากการเข้าร่วมประเภทต่างๆของคุณทั้งหมดให้ผลลัพธ์เหมือนกันว่าคุณทำผิดอย่างใดและการเพิ่มโค้ดบางส่วนอาจช่วยให้เราทราบปัญหาของคุณได้ ในช่วงเวลาดังกล่าวให้ไปที่บล็อกของ Jeff Atwoodเป็นเวลา 2 นาทีเพื่อแนะนำประเภทการเข้าร่วมต่างๆ
fvu

คำตอบ:


154

เอกสาร 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 ไม่ใช่สถานที่ที่เหมาะสมสำหรับการสนทนาระดับนั้น


1
ไม่เคยได้ยินเรื่องการเข้าร่วมข้ามหรือต้องการ ... จนถึงวันนี้
goos

12

ดูตัวอย่างบางส่วนในhttp://www.sitepoint.com/underunder-sql-joins-mysql-database/

คุณสามารถใช้ 'USING' แทน 'ON' ได้เช่นเดียวกับในแบบสอบถาม

SELECT * FROM table1 LEFT JOIN table2 USING (id);

4
สำหรับคำชี้แจงเพิ่มเติมคอลัมน์การรวมในทั้งสองตารางจะต้องมีชื่อเหมือนกันเพื่อใช้ในการทำงาน
rmirabelle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.