Node.js MySQL Tham gia


Tham gia hai hoặc nhiều bàn

Bạn có thể kết hợp các hàng từ hai hoặc nhiều bảng, dựa trên một cột có liên quan giữa chúng, bằng cách sử dụng câu lệnh JOIN.

Hãy xem xét bạn có một bảng "người dùng" và một bảng "sản phẩm":

người dùng

[
  { id: 1, name: 'John', favorite_product: 154},
  { id: 2, name: 'Peter', favorite_product: 154},
  { id: 3, name: 'Amy', favorite_product: 155},
  { id: 4, name: 'Hannah', favorite_product:},
  { id: 5, name: 'Michael', favorite_product:}
]

Mỹ phẩm

[
  { id: 154, name: 'Chocolate Heaven' },
  { id: 155, name: 'Tasty Lemons' },
  { id: 156, name: 'Vanilla Dreams' }
]

Hai bảng này có thể được kết hợp bằng cách sử dụng favorite_producttrường của người dùng và trường sản phẩm id.

Thí dụ

Chọn các bản ghi có kết quả phù hợp trong cả hai bảng:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Lưu ý: Bạn có thể sử dụng INNER JOIN thay vì JOIN. Cả hai đều sẽ cho bạn cùng một kết quả.

Lưu đoạn mã trên vào một tệp có tên "demo_db_join.js" và chạy tệp:

Chạy "demo_db_join.js"

C:\Users\Your Name>node demo_db_join.js

Điều này sẽ cung cấp cho bạn kết quả này:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' }
]

Như bạn có thể thấy từ kết quả ở trên, chỉ các bản ghi có khớp trong cả hai bảng mới được trả về.


Chỗ nối bên trái

Nếu bạn muốn trả lại tất cả người dùng, bất kể họ có sản phẩm yêu thích hay không, hãy sử dụng câu lệnh LEFT JOIN:

Thí dụ

Chọn tất cả người dùng và sản phẩm yêu thích của họ:

SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN
products ON users.favorite_product = products.id

Điều này sẽ cung cấp cho bạn kết quả này:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: 'Hannah', favorite: null },
  { user: 'Michael', favorite: null }
]

Tham gia đúng

Nếu bạn muốn trả lại tất cả các sản phẩm và những người dùng có chúng là sản phẩm yêu thích của họ, ngay cả khi không có người dùng nào coi chúng là sản phẩm yêu thích của họ, hãy sử dụng câu lệnh RIGHT JOIN:

Thí dụ

Chọn tất cả các sản phẩm và người dùng yêu thích chúng:

SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN
products ON users.favorite_product = products.id

Điều này sẽ cung cấp cho bạn kết quả này:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: null, favorite: 'Vanilla Dreams' }
]

Lưu ý: Hannah và Michael, những người không có sản phẩm yêu thích, không được đưa vào kết quả.