Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีการใช้ CROSS JOIN อย่างถูกต้องใน MySQL?


CROSS JOIN ใน MySQL ส่งคืนผลิตภัณฑ์ Cartesian ของแถวจากตารางที่เข้าร่วม เรามาดูตัวอย่างโดยการสร้างตาราง −

mysql> สร้างตาราง PairDemo -> ( -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(20), -> UserRelationshipName varchar(20) -> );Query OK, 0 แถวได้รับผลกระทบ (0.56 วินาที) 

ตัวอย่าง

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −

mysql> แทรกลงในค่า PairDemo (ชื่อผู้ใช้ UserRelationshipName) ('John','James'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที) mysql> แทรกลงในค่า PairDemo (ชื่อผู้ใช้ UserRelationshipName) ('Carol', 'James');แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่าของ PairDemo (ชื่อผู้ใช้ UserRelationshipName) ('Carol', 'David'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.25 วินาที) mysql> แทรกลงใน PairDemo(ชื่อผู้ใช้,UserRelationshipName) ค่า ('Sam','David');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.19 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

mysql> เลือก *จาก PairDemo;

ผลลัพธ์

<ก่อนหน้า>+---------+----------+----------------------+| รหัสผู้ใช้ | ชื่อผู้ใช้ | UserRelationshipName |+---------+----------+--------------------------------+| 1 | จอห์น | เจมส์ || 2 | แครอล | เจมส์ || 3 | แครอล | เดวิด || 4 | แซม | เดวิด |+---------+----------+----------------------+4 แถวในชุด (0.00 วินาที)

ต่อไปนี้เป็นแบบสอบถามเพื่อใช้ CROSS JOIN -

mysql> SELECT U.UserName, UR.UserRelationshipName -> FROM ( -> (เลือกชื่อผู้ใช้ DISTINCT จาก PairDemo) U -> CROSS JOIN -> (เลือก DISTINCT UserRelationshipName จาก PairDemo) UR -> ) ที่ไม่มีอยู่ ( -> SELECT * FROM PairDemo tbl -> WHERE tbl.UserName =U.UserName -> AND tbl.UserRelationshipName =UR.UserRelationshipName -> );

นี่คือผลลัพธ์ที่แสดงผลลัพธ์ของแบบสอบถามข้างต้นที่ใช้ CROSS JOIN -

<ก่อนหน้า>+----------+----------------------+| ชื่อผู้ใช้ | UserRelationshipName |+----------+----------------------+| แซม | เจมส์ || จอห์น | David |+----------+----------------------+2 แถวในชุด (0.03 วินาที)