Hướng dẫn how do i join two tables in different columns in mysql? - làm cách nào để nối hai bảng trong các cột khác nhau trong mysql?

Tôi muốn hợp nhất hai bảng với các cột khác nhau MySQL. Ví dụ:

Show

Bảng 1 :

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp

Ban 2:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp

Các bảng trên là ví dụ. Tôi đã sáp nhập với Liên minh. Đây là truy vấn của tôiUNION. Here is my query

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC

Điều này đang hoạt động tốt sau khi thực hiện truy vấn, tôi sẽ nhận được kết quả như

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp

Nhưng tôi muốn một cột ảo trong kết quả hiển thị hàng từ bảng như hiển thị bên dưới

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2

Giới thiệu

Mặc dù thường rất hữu ích khi tách dữ liệu thành các bảng riêng biệt cho mục đích hiệu suất và tính nhất quán, bạn thường cần tham khảo dữ liệu từ nhiều bảng để trả lời một số yêu cầu nhất định. Tham gia bảng là một cách kết hợp dữ liệu từ các bảng khác nhau bằng cách khớp với từng bản ghi dựa trên các giá trị trường chung.

Có một vài loại tham gia khác nhau, cung cấp nhiều cách khác nhau để kết hợp hồ sơ bảng. Trong bài viết này, chúng tôi sẽ đề cập đến cách MySQL thực hiện tham gia và thảo luận về các kịch bản trong đó mỗi trường hợp hữu ích nhất.

Tham gia là gì?

Nói tóm lại, tham gia là một cách hiển thị dữ liệu từ nhiều bảng. Họ làm điều này bằng cách ghép các bản ghi lại với nhau từ các nguồn khác nhau dựa trên các giá trị phù hợp trong các cột nhất định. Mỗi hàng kết quả bao gồm một bản ghi từ bảng thứ nhất kết hợp với một hàng từ bảng thứ hai, dựa trên một hoặc nhiều cột trong mỗi bảng có cùng một giá trị.

Cú pháp cơ bản của một tham gia trông như thế này:

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

Trong một lần nối, mỗi hàng kết quả được xây dựng bằng cách bao gồm tất cả các cột của bảng thứ nhất theo sau là tất cả các cột từ bảng thứ hai. Phần

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
2 của truy vấn có thể được sử dụng để chỉ định các cột chính xác bạn muốn hiển thị.

Nhiều hàng có thể được xây dựng từ các bảng gốc nếu các giá trị trong các cột được sử dụng để so sánh không phải là duy nhất. Ví dụ, hãy tưởng tượng bạn có một cột được so sánh từ bảng đầu tiên có hai bản ghi có giá trị "màu đỏ". Kết hợp với đây là một cột từ bảng thứ hai có ba hàng với giá trị đó. Sự tham gia sẽ tạo ra sáu hàng khác nhau cho giá trị đó đại diện cho các kết hợp khác nhau có thể đạt được.

Loại tham gia và các điều kiện tham gia xác định cách mỗi hàng được hiển thị được xây dựng. Điều này tác động đến những gì xảy ra với các hàng từ mỗi bảng và không có trận đấu với điều kiện tham gia.

Để thuận tiện, nhiều người tham gia khớp với khóa chính trên một bảng có khóa nước ngoài liên quan trên bảng thứ hai. Mặc dù các khóa chính và nước ngoài chỉ được sử dụng bởi hệ thống cơ sở dữ liệu để duy trì các đảm bảo tính nhất quán, mối quan hệ của chúng thường khiến chúng trở thành một ứng cử viên tốt cho các điều kiện tham gia.

Các loại tham gia khác nhau

Nhiều loại tham gia có sẵn, mỗi loại có khả năng tạo ra kết quả khác nhau. Hiểu cách từng loại được xây dựng sẽ giúp bạn xác định cái nào phù hợp cho các kịch bản khác nhau.

Nội tâm và chéo tham gia

Sự tham gia mặc định được gọi là tham gia bên trong. Trong MySQL, điều này có thể được chỉ định bằng cách sử dụng

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
3, chỉ
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
4 hoặc
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
5. Đối với các hệ thống cơ sở dữ liệu khác,
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
3 và
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
5 thường là hai khái niệm riêng biệt, nhưng MySQL thực hiện chúng trong cùng một cấu trúc.

Dưới đây là một ví dụ điển hình chứng minh cú pháp của một lần nối bên trong:

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

Tham gia bên trong là loại tham gia hạn chế nhất vì nó chỉ hiển thị các hàng được tạo bằng cách kết hợp các hàng từ mỗi bảng. Bất kỳ hàng nào trong các bảng cấu thành không có đối tác phù hợp trong bảng khác đều được xóa khỏi kết quả. Ví dụ: nếu bảng thứ nhất có giá trị "màu xanh" trong cột so sánh và bảng thứ hai không có bản ghi với giá trị đó, hàng đó sẽ bị triệt tiêu từ đầu ra.

Nếu bạn đại diện cho kết quả dưới dạng sơ đồ Venn của các bảng thành phần, một tham gia bên trong cho phép bạn biểu diễn khu vực chồng chéo của hai vòng tròn. Không có giá trị nào chỉ tồn tại trong một trong các bảng được hiển thị.

Như đã đề cập ở trên, MySQL cũng sử dụng định dạng này để tạo ra các kết nối chéo. Trong MySQL, bạn có thể tạo ra một tham gia chéo bằng cách sử dụng một lần nối bên trong mà không có bất kỳ điều kiện phù hợp nào. Tham gia chéo không sử dụng bất kỳ so sánh nào để xác định xem các hàng trong mỗi bảng có khớp với nhau hay không. Thay vào đó, các kết quả được xây dựng bằng cách chỉ thêm từng hàng từ bảng thứ nhất vào mỗi hàng của bảng thứ hai.

Điều này tạo ra một sản phẩm Cartesian của các hàng trong hai hoặc nhiều bảng. Trong thực tế, kiểu tham gia này kết hợp các hàng từ mỗi bảng vô điều kiện. Vì vậy, nếu mỗi bảng có ba hàng, bảng kết quả sẽ có chín hàng chứa tất cả các cột từ cả hai bảng.

Ví dụ: nếu bạn có một bảng gọi là

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
8 kết hợp với một bảng gọi là
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
9, mỗi bảng có hàng
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
0,
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
1 và
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
2, kết quả sẽ là chín hàng kết hợp như vậy:

t1.r1 + t2.r1

t1.r1 + t2.r2

t1.r1 + t2.r3

t1.r2 + t2.r1

t1.r2 + t2.r2

t1.r2 + t2.r3

t1.r3 + t2.r1

t1.r3 + t2.r2

t1.r3 + t2.r3

Chỗ nối bên trái

Tham gia bên trái là một tham gia hiển thị tất cả các bản ghi được tìm thấy trong một tham gia bên trong, cộng với tất cả các hàng chưa từng có từ bảng đầu tiên. Trong MySQL, điều này có thể được chỉ định là

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
3 hoặc chỉ là
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
4.

Cú pháp cơ bản của tham gia bên trái theo mẫu này:

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

Một lần tham gia bên trái được xây dựng bằng cách thực hiện đầu tiên một tham gia bên trong để xây dựng các hàng từ tất cả các bản ghi phù hợp trong cả hai bảng. Sau đó, các bản ghi chưa từng có từ bảng đầu tiên cũng được bao gồm. Vì mỗi hàng trong một lần nối bao gồm các cột của cả hai bảng, các cột chưa từng có sử dụng

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
5 làm giá trị cho tất cả các cột trong bảng thứ hai.

Nếu bạn đại diện cho kết quả dưới dạng sơ đồ Venn của các bảng thành phần, một tham gia bên trái cho phép bạn biểu diễn toàn bộ vòng tròn bên trái. Các phần của vòng tròn bên trái được biểu thị bằng giao điểm giữa hai vòng tròn sẽ có thêm dữ liệu được bổ sung bởi bảng bên phải.

Đúng vậy tham gia

Tham gia bên phải là một sự tham gia hiển thị tất cả các bản ghi được tìm thấy trong một tham gia bên trong, cộng với tất cả các hàng chưa từng có từ bảng thứ hai. Trong MySQL, điều này có thể được chỉ định là

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
6 hoặc chỉ là
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
7.

Cú pháp cơ bản của tham gia bên phải theo mẫu này:

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

Một sự tham gia bên phải được xây dựng bằng cách thực hiện đầu tiên một tham gia bên trong để xây dựng các hàng từ tất cả các bản ghi phù hợp trong cả hai bảng. Sau đó, các hồ sơ chưa từng có từ bảng thứ hai cũng được bao gồm. Vì mỗi hàng trong một lần nối bao gồm các cột của cả hai bảng, các cột chưa từng có sử dụng

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
5 làm giá trị cho tất cả các cột trong bảng đầu tiên.

Nếu bạn đại diện cho kết quả dưới dạng sơ đồ Venn của các bảng thành phần, hãy tham gia bên phải cho phép bạn đại diện cho toàn bộ vòng tròn bên phải. Các phần của vòng tròn bên phải được biểu thị bằng giao điểm giữa hai vòng tròn sẽ có thêm dữ liệu được bổ sung bởi bảng bên trái.

Vì lý do tính di động, MySQL khuyên bạn nên sử dụng các kết nối bên trái thay vì tham gia bên phải nếu có thể.

Tham gia đầy đủ

Một sự tham gia đầy đủ là một sự tham gia hiển thị tất cả các bản ghi được tìm thấy trong một tham gia bên trong, cộng với tất cả các hàng chưa từng có từ cả hai bảng thành phần. MySQL không thực hiện hoàn toàn các kết nối đầy đủ, nhưng chúng ta có thể mô phỏng hành vi bằng một vài thủ thuật.

Để tái tạo kết quả của một lần nối bên ngoài đầy đủ, chúng tôi sẽ thực hiện tham gia bên trái vào tất cả các kết quả được chia sẻ bởi cả hai bảng và tất cả các hàng chưa từng có từ bảng bên trái. Sau đó, chúng tôi sẽ sử dụng toán tử

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
9 để kết hợp các kết quả đó với "chống join" cho bảng phù hợp. "Chống tham gia" là một hoạt động tham gia mà độc quyền tìm thấy kết quả không có điểm chung giữa các bảng.

Cú pháp cơ bản của tham gia đầy đủ theo mẫu này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
0

Vì mỗi hàng trong một lần nối bao gồm các cột của cả hai bảng, các cột chưa từng có sử dụng

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
5 làm giá trị cho tất cả các cột trong bảng chưa từng có.

Nếu bạn đại diện cho kết quả dưới dạng sơ đồ Venn của các bảng thành phần, một lần tham gia đầy đủ cho phép bạn hoàn toàn thể hiện cả hai vòng tròn thành phần. Giao điểm của hai vòng tròn sẽ có các giá trị được cung cấp bởi mỗi bảng thành phần. Các phần của các vòng tròn bên ngoài khu vực chồng chéo sẽ có các giá trị từ bảng mà chúng thuộc về, sử dụng

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
5 để điền vào các cột được tìm thấy trong bảng khác.

Tự tham gia

Tự tham gia là bất kỳ sự tham gia nào kết hợp các hàng của bảng với chính nó. Nó có thể không rõ ràng làm thế nào điều này có thể hữu ích, nhưng nó thực sự có nhiều ứng dụng phổ biến.

Thông thường, các bảng mô tả các thực thể có thể hoàn thành nhiều vai trò trong mối quan hệ với nhau. Chẳng hạn, nếu bạn có một bảng

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
2, mỗi hàng có khả năng chứa cột
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
3 tham chiếu khác
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
2 trong bảng. Một sự tham gia của bản thân sẽ cho phép bạn khâu các hàng khác nhau này lại với nhau bằng cách tham gia một phiên bản thứ hai của bảng đến lần đầu tiên nơi các giá trị này khớp với nhau.

Vì bản thân tham gia tham chiếu cùng một bảng hai lần, nên các bí danh bảng được yêu cầu để định hướng các tài liệu tham khảo. Ví dụ, trong ví dụ trên, bạn có thể tham gia hai trường hợp của bảng

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
2 bằng các bí danh
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
6 và
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
7. Bằng cách đó, bạn có thể chỉ định thể hiện của bảng bạn đang đề cập đến khi xác định các điều kiện tham gia.

Dưới đây là một ví dụ khác, lần này đại diện cho mối quan hệ giữa nhân viên và người quản lý:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
1

Tham gia điều kiện

Khi kết hợp các bảng, điều kiện nối xác định mức độ các hàng sẽ được khớp với nhau để tạo thành kết quả tổng hợp. Tiền đề cơ bản là xác định các cột trong mỗi bảng phải khớp với sự tham gia xảy ra trên hàng đó.

Điều khoản -------------------------------------------------------------------------- item_id title slug type views updatedAt createdAt from_tbl -------------------------------------------------------------------------- 1 sometitle someslg 1 43454 timestamp timestamp t1 1 sometitle someslg 3434 timestamp timestamp t2 2 sometitle someslg 1 43566 timestamp timestamp t1 2 sometitle someslg 6454 timestamp timestamp t2 3 sometitle someslg 5454 timestamp timestamp t2 8

Cách tiêu chuẩn nhất để xác định các điều kiện để tham gia bảng là với mệnh đề

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8. Điều khoản
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 sử dụng một dấu bằng để chỉ định các cột chính xác từ mỗi bảng sẽ được so sánh để xác định khi nào có thể xảy ra tham gia. MySQL sử dụng các cột được cung cấp để ghép các hàng với nhau từ mỗi bảng.

Điều khoản

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 là dòng dài nhất, nhưng cũng linh hoạt nhất trong các điều kiện tham gia có sẵn. Nó cho phép tính đặc hiệu bất kể các tên cột được tiêu chuẩn hóa như thế nào của mỗi bảng được kết hợp.

Cú pháp cơ bản của mệnh đề

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 trông như thế này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
2

Tại đây, các hàng từ

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 và

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4 sẽ được nối bất cứ khi nào cột

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

5 từ

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 khớp với cột

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

7 từ

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4. Bởi vì một lần nối bên trong được sử dụng, kết quả sẽ chỉ hiển thị các hàng được nối. Vì truy vấn sử dụng ký tự ký tự đại diện

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

9, tất cả các cột từ cả hai bảng sẽ được hiển thị.

Điều này có nghĩa là cả cột

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

5 từ cột

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 và

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

7 từ

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4 sẽ được hiển thị, mặc dù chúng có cùng giá trị chính xác nhờ vào điều kiện tham gia. Bạn có thể tránh sự trùng lặp này bằng cách gọi các cột chính xác bạn muốn hiển thị trong danh sách cột
SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
2.

Điều khoản SELECT *FROM table_1[INNER] JOIN table_2 ON table_1.id = table_2.table_1_id;5

Điều khoản

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5 là một tốc ký để chỉ định các điều kiện của mệnh đề
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 có thể được sử dụng khi các cột được so sánh có cùng tên trong cả hai bảng. Điều khoản

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5 lấy một danh sách, được đặt trong ngoặc đơn, của các tên cột được chia sẻ nên được so sánh.

Cú pháp chung của mệnh đề

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5 sử dụng định dạng này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
3

Tham gia này kết hợp

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 với

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4 khi hai cột mà cả hai bảng chia sẻ (

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

5 và

t1.r1 + t2.r1

t1.r1 + t2.r2

t1.r1 + t2.r3

t1.r2 + t2.r1

t1.r2 + t2.r2

t1.r2 + t2.r3

t1.r3 + t2.r1

t1.r3 + t2.r2

t1.r3 + t2.r3

3) mỗi cột có các giá trị phù hợp.

Sự tham gia tương tự này có thể được thể hiện nhiều hơn bằng cách sử dụng

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 như thế này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
4

Mặc dù cả hai lần nối ở trên sẽ dẫn đến cùng một hàng được xây dựng với cùng một dữ liệu, chúng sẽ được hiển thị hơi khác nhau. Trong khi mệnh đề

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8 bao gồm tất cả các cột từ cả hai bảng, mệnh đề

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5 triệt tiêu các cột trùng lặp. Vì vậy, thay vì có hai cột

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

5 riêng biệt và hai cột

t1.r1 + t2.r1

t1.r1 + t2.r2

t1.r1 + t2.r3

t1.r2 + t2.r1

t1.r2 + t2.r2

t1.r2 + t2.r3

t1.r3 + t2.r1

t1.r3 + t2.r2

t1.r3 + t2.r3

3 riêng biệt (một cho mỗi bảng), kết quả sẽ có một trong mỗi cột được chia sẻ, theo sau là tất cả các cột khác được cung cấp bởi

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 và

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4.

Điều khoản SELECT *FROM table_1LEFT JOIN table_2 ON table_1.id = table_2.table_1_id;1

Điều khoản

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

1 là một tốc ký khác có thể làm giảm thêm độ mẫn của mệnh đề

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5. Tham gia

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

1 không chỉ định bất kỳ cột nào được khớp. Thay vào đó, MySQL sẽ tự động tham gia các bảng dựa trên tất cả các cột có các cột phù hợp trong mỗi cơ sở dữ liệu.

Cú pháp chung của mệnh đề tham gia

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

1 trông như thế này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
5

Giả sử rằng

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

3 và

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

4 đều có các cột có tên

SELECT

*

FROM

<first_table>

<join_type> <second_table>

<join_condition>;

5,

t1.r1 + t2.r1

t1.r1 + t2.r2

t1.r1 + t2.r3

t1.r2 + t2.r1

t1.r2 + t2.r2

t1.r2 + t2.r3

t1.r3 + t2.r1

t1.r3 + t2.r2

t1.r3 + t2.r3

3 và

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

0, truy vấn trên sẽ tương đương với truy vấn này bằng điều khoản
--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2
8:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
6

Và truy vấn này sử dụng mệnh đề

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
7

Giống như mệnh đề

SELECT

*

FROM

table_1

[INNER] JOIN table_2

ON table_1.id = table_2.table_1_id;

5, mệnh đề

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

1 triệt tiêu các cột trùng lặp, do đó sẽ chỉ có một trường hợp duy nhất của mỗi cột được nối trong kết quả.

Trong khi mệnh đề

SELECT

*

FROM

table_1

LEFT JOIN table_2

ON table_1.id = table_2.table_1_id;

1 có thể làm giảm độ mịn của các truy vấn của bạn, nhưng phải cẩn thận khi sử dụng nó. Do các cột được sử dụng để nối các bảng được tự động tính toán, nếu các cột trong các bảng thành phần thay đổi, kết quả có thể khác nhau rất nhiều do các điều kiện tham gia mới.

Tham gia điều kiện và mệnh đề SELECT *FROM table_1RIGHT JOIN table_2 ON table_1.id = table_2.table_1_id;6

Tham gia các điều kiện chia sẻ nhiều đặc điểm với các so sánh được sử dụng để lọc các hàng dữ liệu bằng các mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6. Cả hai cấu trúc xác định các biểu thức phải đánh giá đúng cho hàng được xem xét. Bởi vì điều này, không phải lúc nào cũng trực quan về sự khác biệt giữa bao gồm các so sánh bổ sung trong cấu trúc

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6 so với việc xác định chúng trong chính điều khoản tham gia.

Để hiểu được sự khác biệt sẽ dẫn đến, chúng ta phải xem xét thứ tự mà MySQL xử lý các phần khác nhau của truy vấn. Trong trường hợp này, các vị từ trong điều kiện tham gia được xử lý trước tiên để xây dựng bảng được nối ảo trong bộ nhớ. Sau giai đoạn này, các biểu thức trong mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6 được đánh giá để lọc các hàng thu được.

Ví dụ, giả sử rằng chúng ta có hai bảng được gọi là

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
00 và
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
01 mà chúng ta cần tham gia cùng nhau. Chúng tôi muốn tham gia hai bảng bằng cách khớp cột
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
02 với cột
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
03. Ngoài ra, chúng tôi quan tâm đến các hàng trong bảng
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
01 có
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
05 là 12345.

Đưa ra các yêu cầu trên, chúng tôi có hai điều kiện mà chúng tôi quan tâm. Tuy nhiên, cách chúng tôi thể hiện các điều kiện này sẽ xác định kết quả chúng tôi nhận được.

Đầu tiên, chúng ta hãy sử dụng cả hai điều kiện tham gia cho

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
4:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
8

Kết quả có khả năng trông giống như thế này:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
9

MySQL đã đạt được kết quả này bằng cách thực hiện các hoạt động sau:

  1. Kết hợp bất kỳ hàng nào trong bảng
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    00 với bảng
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    01 trong đó:
    • -------------------------------------------------------------
      id    ptitle   slug     pviews   updatedAt   createdAt
      -------------------------------------------------------------
       1  sometitle  someslg  3434    timestamp   timestamp
       2  sometitle  someslg  6454    timestamp   timestamp
       3  sometitle  someslg  5454    timestamp   timestamp
      
      02 khớp với
      -------------------------------------------------------------
      id    ptitle   slug     pviews   updatedAt   createdAt
      -------------------------------------------------------------
       1  sometitle  someslg  3434    timestamp   timestamp
       2  sometitle  someslg  6454    timestamp   timestamp
       3  sometitle  someslg  5454    timestamp   timestamp
      
      10.
    • -------------------------------------------------------------
      id    ptitle   slug     pviews   updatedAt   createdAt
      -------------------------------------------------------------
       1  sometitle  someslg  3434    timestamp   timestamp
       2  sometitle  someslg  6454    timestamp   timestamp
       3  sometitle  someslg  5454    timestamp   timestamp
      
      11 khớp với 12345
  2. Bởi vì chúng tôi đang sử dụng tham gia bên trái, bao gồm bất kỳ hàng không gì sánh được từ bảng bên trái (
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    00), nên đệm các cột từ bảng bên phải (
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    01) với các giá trị
    -------------------------------------------------------------
    item_id   title   slug   type   views   updatedAt   createdAt
    -------------------------------------------------------------
     1    sometitle someslg  1     43454    timestamp   timestamp
     1    sometitle someslg        3434     timestamp   timestamp
     2    sometitle someslg  1     43566    timestamp   timestamp
     2    sometitle someslg        6454     timestamp   timestamp
     3    sometitle someslg        5454     timestamp   timestamp
    
    5.
  3. Chỉ hiển thị các cột được liệt kê trong đặc tả cột
    SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
    FROM table1
    t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
    ORDER BY t3.item_id ASC
    
    2.

Kết quả là tất cả các hàng tham gia của chúng tôi đều khớp với cả hai điều kiện mà chúng tôi đang tìm kiếm. Tuy nhiên, sự tham gia bên trái khiến MySQL cũng bao gồm bất kỳ hàng nào từ bảng đầu tiên không thỏa mãn điều kiện tham gia. Điều này dẫn đến các hàng "trái" dường như không tuân theo mục đích rõ ràng của truy vấn.

Nếu chúng ta di chuyển truy vấn thứ hai (

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
11 = 12345) sang mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6, thay vì bao gồm nó như một điều kiện tham gia, chúng ta sẽ nhận được kết quả khác nhau:

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
0

Lần này, chỉ có ba hàng được hiển thị:

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC
1

Thứ tự mà các so sánh được thực hiện là lý do cho những khác biệt này. Lần này, MySQL xử lý truy vấn như thế này:

  1. Kết hợp bất kỳ hàng nào trong bảng
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    00 với bảng
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    01 trong đó
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    02 khớp với
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    10.
  2. Bởi vì chúng tôi đang sử dụng tham gia bên trái, bao gồm bất kỳ hàng không gì sánh được từ bảng bên trái (
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    00), nên đệm các cột từ bảng bên phải (
    -------------------------------------------------------------
    id    ptitle   slug     pviews   updatedAt   createdAt
    -------------------------------------------------------------
     1  sometitle  someslg  3434    timestamp   timestamp
     2  sometitle  someslg  6454    timestamp   timestamp
     3  sometitle  someslg  5454    timestamp   timestamp
    
    01) với các giá trị
    -------------------------------------------------------------
    item_id   title   slug   type   views   updatedAt   createdAt
    -------------------------------------------------------------
     1    sometitle someslg  1     43454    timestamp   timestamp
     1    sometitle someslg        3434     timestamp   timestamp
     2    sometitle someslg  1     43566    timestamp   timestamp
     2    sometitle someslg        6454     timestamp   timestamp
     3    sometitle someslg        5454     timestamp   timestamp
    
    5.
  3. Chỉ hiển thị các cột được liệt kê trong đặc tả cột
    SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
    FROM table1
    t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
    ORDER BY t3.item_id ASC
    
    2.
  4. Chỉ hiển thị các cột được liệt kê trong đặc tả cột
    SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
    FROM table1
    t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
    ORDER BY t3.item_id ASC
    
    2.

Kết quả là tất cả các hàng tham gia của chúng tôi đều khớp với cả hai điều kiện mà chúng tôi đang tìm kiếm. Tuy nhiên, sự tham gia bên trái khiến MySQL cũng bao gồm bất kỳ hàng nào từ bảng đầu tiên không thỏa mãn điều kiện tham gia. Điều này dẫn đến các hàng "trái" dường như không tuân theo mục đích rõ ràng của truy vấn.

Nếu chúng ta di chuyển truy vấn thứ hai (

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
11 = 12345) sang mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6, thay vì bao gồm nó như một điều kiện tham gia, chúng ta sẽ nhận được kết quả khác nhau:

Lần này, chỉ có ba hàng được hiển thị:

Thứ tự mà các so sánh được thực hiện là lý do cho những khác biệt này. Lần này, MySQL xử lý truy vấn như thế này:

Kết hợp bất kỳ hàng nào trong bảng

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
00 với bảng
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
01 trong đó
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
02 khớp với
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
10.

Đánh giá mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6 để loại bỏ bất kỳ hàng nào không có 12345 là giá trị cho cột
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
11.

Lần này, mặc dù chúng tôi đang sử dụng tham gia bên trái, mệnh đề

SELECT

*

FROM

table_1

RIGHT JOIN table_2

ON table_1.id = table_2.table_1_id;

6 cắt ngắn kết quả bằng cách lọc tất cả các hàng mà không có chính xác ____105. Bởi vì bất kỳ hàng chưa từng có nào sẽ có
-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp
05 được đặt thành
-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp
5, điều này sẽ loại bỏ tất cả các hàng chưa từng có được tạo ra bởi sự tham gia bên trái. Nó cũng loại bỏ bất kỳ hàng nào được khớp với điều kiện tham gia không vượt qua vòng kiểm tra thứ hai này.

Hiểu được quy trình cơ bản mà MySQL sử dụng để thực hiện các truy vấn của bạn có thể giúp bạn tránh một số sai lầm dễ thực hiện nhưng khó gây khó khăn khi bạn làm việc với dữ liệu của mình.

Sự kết luận

Hướng dẫn how do i join two tables in different columns in mysql? - làm cách nào để nối hai bảng trong các cột khác nhau trong mysql?

Trong bài viết này, chúng tôi đã thảo luận về sự tham gia là gì và cách MySQL thực hiện chúng như một cách kết hợp các bản ghi từ nhiều bảng. Chúng tôi đã đề cập đến các loại tham gia khác nhau có sẵn và cách các điều kiện khác nhau như các mệnh đề -------------------------------------------------------------------------- item_id title slug type views updatedAt createdAt from_tbl -------------------------------------------------------------------------- 1 sometitle someslg 1 43454 timestamp timestamp t1 1 sometitle someslg 3434 timestamp timestamp t2 2 sometitle someslg 1 43566 timestamp timestamp t1 2 sometitle someslg 6454 timestamp timestamp t2 3 sometitle someslg 5454 timestamp timestamp t2 8 và SELECT *FROM table_1RIGHT JOIN table_2 ON table_1.id = table_2.table_1_id;6 ảnh hưởng đến cách cơ sở dữ liệu xây dựng kết quả.

Khi bạn quen thuộc hơn với các lần tham gia, bạn sẽ có thể sử dụng chúng như một phần thông thường trong bộ công cụ của mình để lấy dữ liệu từ nhiều nguồn khác nhau và ghép các mẩu thông tin lại với nhau để tạo ra một bức tranh đầy đủ hơn. Tham gia giúp tập hợp dữ liệu mà các nguyên tắc tổ chức và xem xét hiệu suất có thể tách rời. Học cách sử dụng hiệu quả các tham gia có thể giúp bạn tập hợp dữ liệu bất kể nó được tổ chức một cách hiệu quả trong hệ thống.

Làm cách nào để tham gia hai cột của các bảng khác nhau trong MySQL?

Điều khoản sử dụng này Tham gia kết hợp Bảng1 với Bảng2 khi hai cột mà cả hai bảng chia sẻ (ID và trạng thái) mỗi bảng có các giá trị phù hợp. Bảng1.ID = Bảng2.ID và Bảng1. trạng thái = Bảng 2.This join combines table1 with table2 when two columns that both tables share ( id and state ) each have matching values. table1.id = table2.id AND table1. state = table2.

Bạn có thể tham gia hai bảng với nhiều cột SQL không?

Bạn sẽ tham gia các bảng, đôi khi bằng một cột và các lần khác bởi hai hoặc nhiều cột.Như bạn đã thấy, việc tham gia các bảng theo nhiều cột khá đơn giản trong SQL.Nhưng nếu bạn muốn trở nên tự tin trong việc sử dụng các tham gia SQL, thực hành với các bộ dữ liệu trong thế giới thực là một yếu tố thành công quan trọng.joining tables by multiple columns is quite straightforward in SQL. But if you want to become confident in using SQL JOINs , practicing with real-world data sets is a key success factor.

Làm cách nào để tham gia hai bảng với các tên cột khác nhau trong SQL?

Hợp nhất bảng theo cột.Nhiều bảng có thể được hợp nhất bởi các cột trong SQL bằng cách sử dụng các kết nối.Tham gia hợp nhất hai bảng dựa trên các cột được chỉ định (thường là khóa chính của một bảng và khóa ngoại của bảng khác).using joins. Joins merge two tables based on the specified columns (generally, the primary key of one table and a foreign key of the other).

Bạn có thể tham gia các bảng trên 2 cột không?

Nếu bạn muốn lấy dữ liệu được lưu trữ trong các bảng được nối bởi khóa ghép có khóa chính trong một bảng và khóa ngoại trong một bảng khác, chỉ cần sử dụng điều kiện tham gia trên nhiều cột.Trong một bảng tham gia (trong ví dụ của chúng tôi, đăng ký), chúng tôi có một khóa chính được xây dựng từ hai cột (student_id và khóa học_code).use a join condition on multiple columns. In one joined table (in our example, enrollment ), we have a primary key built from two columns ( student_id and course_code ).