Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để áp dụng CROSS JOIN chính xác trong MySQL?

CROSS JOIN trong MySQL trả về sản phẩm Descartes của các hàng từ các bảng đã kết hợp. Hãy để chúng tôi xem một ví dụ bằng cách tạo một bảng -

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)

Ví dụ

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau -

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)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng một câu lệnh chọn. Truy vấn như sau -

mysql> select *from PairDemo;

Đầu ra

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

Sau đây là truy vấn để áp dụng 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
    -> ) ;

Đây là đầu ra hiển thị kết quả của truy vấn ở trên triển khai CROSS JOIN -

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