Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara membuat kueri bergabung menggunakan Sequelize di Node.js

Meskipun jawaban yang diterima tidak salah secara teknis, itu tidak menjawab pertanyaan awal atau pertanyaan lanjutan di komentar, yang saya cari di sini. Tapi saya menemukan jawabannya, jadi begini.

Jika Anda ingin menemukan semua Postingan yang memiliki Pengguna (dan hanya yang memiliki pengguna) di mana SQL akan terlihat seperti ini:

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

Yang secara semantik sama dengan SQL asli OP:

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

maka ini yang Anda inginkan:

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

Pengaturan yang diperlukan ke true adalah kunci untuk menghasilkan gabungan dalam. Jika Anda ingin gabungan luar kiri (tempat Anda mendapatkan semua Postingan, terlepas dari apakah ada pengguna yang ditautkan), maka ubah diperlukan menjadi false, atau biarkan karena itu defaultnya:

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

Jika Anda ingin menemukan semua Postingan milik pengguna yang tahun lahirnya 1984, Anda perlu:

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

Perhatikan bahwa yang diperlukan adalah benar secara default segera setelah Anda menambahkan klausa di mana.

Jika Anda ingin semua Postingan, terlepas dari apakah ada pengguna yang dilampirkan tetapi jika ada pengguna maka hanya yang lahir pada tahun 1984, maka tambahkan kembali bidang yang diperlukan di:

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

Jika Anda ingin semua Postingan dengan nama "Sunshine" dan hanya jika itu milik pengguna yang lahir pada tahun 1984, Anda harus melakukan ini:

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

Jika Anda ingin semua Postingan dengan nama "Sunshine" dan hanya jika itu milik pengguna yang lahir pada tahun yang sama yang cocok dengan atribut post_year pada postingan, Anda harus melakukan ini:

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

Saya tahu, tidak masuk akal jika seseorang membuat postingan di tahun kelahirannya, tapi itu hanya sebuah contoh - ikuti saja. :)

Saya menemukan ini (kebanyakan) dari dokumen ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Kegagalan tautan komunikasi

  2. Cara Menambahkan Batasan NOT NULL di MySQL

  3. Bagaimana saya bisa Menyisipkan banyak baris ke dalam tabel MySQL dan mengembalikan ID baru?

  4. MySQL BERBEDA pada GROUP_CONCAT()

  5. BIN() – Dapatkan Nilai Biner Angka di MySQL