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) ซึ่งเป็นการจับคู่ที่ยังไม่มีในตาราง