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

การใช้ CROSS JOIN ใน MySQL ให้ถูกต้อง

CROSS JOIN คืนค่า Cartesian product ของแถวจากตารางที่ join มาสร้างตาราง:

mysql> create table PairDemo ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserName varchar(20), UserRelationshipName varchar(20) ); Query OK, 0 rows affected (0.56 sec)

ตัวอย่าง

แทรกข้อมูล:

mysql> insert into PairDemo(UserName,UserRelationshipName) values('John','James'); Query OK, 1 row affected (0.15 sec) mysql> insert into PairDemo(UserName,UserRelationshipName) values('Carol','James'); Query OK, 1 row affected (0.20 sec) mysql> insert into PairDemo(UserName,UserRelationshipName) values('Carol','David'); Query OK, 1 row affected (0.25 sec) mysql> insert into PairDemo(UserName,UserRelationshipName) values('Sam','David'); Query OK, 1 row affected (0.19 sec)

แสดงข้อมูล:

mysql> select * from PairDemo;

ผลลัพธ์

+--------+----------+----------------------+ | UserId | UserName | UserRelationshipName | +--------+----------+----------------------+ | 1 | John | James | | 2 | Carol | James | | 3 | Carol | David | | 4 | Sam | David | +--------+----------+----------------------+ 4 rows in set (0.00 sec)

คำสั่ง CROSS JOIN หาคู่ที่ ไม่มีอยู่จริง ในตาราง:

mysql> SELECT U.UserName, UR.UserRelationshipName FROM ( (SELECT DISTINCT UserName from PairDemo) U CROSS JOIN (SELECT DISTINCT UserRelationshipName from PairDemo) UR ) WHERE NOT EXISTS ( SELECT * FROM PairDemo tbl WHERE tbl.UserName = U.UserName AND tbl.UserRelationshipName = UR.UserRelationshipName );

ผลลัพธ์

+----------+----------------------+ | UserName | UserRelationshipName | +----------+----------------------+ | Sam | James | | John | David | +----------+----------------------+ 2 rows in set (0.03 sec)

ผลลัพธ์แสดงคู่ (Sam, James) และ (John, David) ซึ่งเป็นการจับคู่ที่ยังไม่มีในตาราง