Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thực hiện các truy vấn tham gia bằng cách sử dụng Sequelize trên Node.js

Mặc dù câu trả lời được chấp nhận không sai về mặt kỹ thuật, nhưng nó không trả lời câu hỏi ban đầu cũng như câu hỏi tiếp theo trong các nhận xét, đó là những gì tôi đến đây để tìm kiếm. Nhưng tôi đã tìm ra, nên bắt đầu.

Nếu bạn muốn tìm tất cả các Bài đăng có Người dùng (và chỉ những Bài có người dùng) thì SQL sẽ trông như thế này:

SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id

Về mặt ngữ nghĩa, điều này giống với SQL gốc của OP:

SELECT * FROM posts, users WHERE posts.user_id = users.id

thì đây là những gì bạn muốn:

Posts.findAll({
  include: [{
    model: User,
    required: true
   }]
}).then(posts => {
  /* ... */
});

Đặt yêu cầu thành true là chìa khóa để tạo ra một liên kết bên trong. Nếu bạn muốn một kết nối bên ngoài bên trái (nơi bạn nhận được tất cả các Bài đăng, bất kể có người dùng được liên kết hay không) thì hãy thay đổi bắt buộc thành false hoặc bỏ nó đi vì đó là mặc định:

Posts.findAll({
  include: [{
    model: User,
//  required: false
   }]
}).then(posts => {
  /* ... */
});

Nếu bạn muốn tìm tất cả Bài đăng của người dùng có năm sinh là 1984, bạn muốn:

Posts.findAll({
  include: [{
    model: User,
    where: {year_birth: 1984}
   }]
}).then(posts => {
  /* ... */
});

Lưu ý rằng yêu cầu là đúng theo mặc định ngay sau khi bạn thêm mệnh đề where vào.

Nếu bạn muốn tất cả Bài đăng, bất kể có người dùng đính kèm hay không nhưng nếu có người dùng thì chỉ những người sinh năm 1984, sau đó thêm lại trường bắt buộc vào:

Posts.findAll({
  include: [{
    model: User,
    where: {year_birth: 1984}
    required: false,
   }]
}).then(posts => {
  /* ... */
});

Nếu bạn muốn tất cả các Bài đăng có tên là "Sunshine" và chỉ khi nó thuộc về người dùng sinh năm 1984, bạn sẽ thực hiện điều này:

Posts.findAll({
  where: {name: "Sunshine"},
  include: [{
    model: User,
    where: {year_birth: 1984}
   }]
}).then(posts => {
  /* ... */
});

Nếu bạn muốn tất cả các Bài đăng có tên là "Sunshine" và chỉ khi nó thuộc về người dùng sinh cùng năm khớp với thuộc tính post_year trên bài đăng, bạn sẽ thực hiện điều này:

Posts.findAll({
  where: {name: "Sunshine"},
  include: [{
    model: User,
    where: ["year_birth = post_year"]
   }]
}).then(posts => {
  /* ... */
});

Tôi biết, sẽ không hợp lý nếu ai đó đăng bài vào năm họ sinh ra, nhưng đó chỉ là một ví dụ - hãy làm với nó. :)

Tôi đã tìm ra điều này (hầu hết) từ tài liệu này:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Những sai lầm hàng đầu cần tránh trong MySQL Replication

  2. Cách thực hiện tìm kiếm Nhạy cảm trong MySql

  3. Cơ sở dữ liệu pincode của Ấn Độ với tập lệnh công cụ tìm vị trí trong php và jquery

  4. Vị trí của tệp my.cnf trên macOS

  5. Cách nâng cấp MySQL trên CentOS