如何在MySQL中正确应用CROSS JOIN?
MySQL中的CROSSJOIN从联接表返回行的笛卡尔积。让我们通过创建表来查看示例-
mysql> create table PairDemo
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20),
-> UserRelationshipName varchar(20)
-> );示例
使用insert命令在表中插入一些记录。查询如下-
mysql> insert into PairDemo(UserName,UserRelationshipName) values('John','James');
mysql> insert into PairDemo(UserName,UserRelationshipName) values('Carol','James');
mysql> insert into PairDemo(UserName,UserRelationshipName) values('Carol','David');
mysql> insert into PairDemo(UserName,UserRelationshipName) values('Sam','David');使用select语句显示表中的所有记录。查询如下-
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)
以下是应用CROSSJOIN的查询-
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
-> ) ;这是显示上述查询实现CROSSJOIN的结果的输出-
+----------+----------------------+ | UserName | UserRelationshipName | +----------+----------------------+ | Sam | James | | John | David | +----------+----------------------+ 2 rows in set (0.03 sec)