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

Apakah mungkin melakukan subquery dengan Sequelize.js?

Saya tidak berpikir jawaban yang bersih untuk pertanyaan Anda mungkin. Lihat #1869 :

Untuk menjawab pertanyaan judul, Sequelize akan secara otomatis membuat subkueri (mis., #1719 ), tetapi Anda tidak dapat melakukan subkueri khusus. Saya tidak memiliki referensi resmi untuk negatif.

Sepertinya tabel Anda seperti ini:

EssayStats
    EssayId
    EssayDate
    WordCount

Kemudian Anda bisa melakukan sesuatu seperti ini:

return EssayStat.findAll({
    attributes: [
        [sequelize.literal('((SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" DESC LIMIT 1) - (SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" ASC LIMIT 1))'), 'difference'],
        'EssayId'
    ],
    group: ['EssayId']
});

Semua yang dilakukannya adalah menjalankan dua kueri SELECT, mengambil MAX dan MIN dari kueri tersebut setelah memesan berdasarkan variabel yang Anda minati, dan kemudian mengambil perbedaan Anda. Itu akan memberi Anda apa yang Anda minati:perbedaan jumlah kata antara versi terbaru dan versi pertama.

Triknya di sini adalah mengenkapsulasi pernyataan SELECT dalam bidang atribut.

Tentu saja, ini sangat berantakan dan mungkin tidak jauh lebih baik daripada sequelize.query kalengan. . Tapi itu menjawab inti dari pertanyaan Anda.

Solusi yang lebih baik mungkin dengan mendenormalisasi beberapa data Anda, dan menyimpan "wordCountDelta" dalam model Essay Anda secara langsung. Kemudian Anda dapat memiliki afterCreate hook untuk memperbarui bidang secara otomatis. Itu kemungkinan besar akan menjadi solusi tercepat juga.

Saya menjawab sesuatu yang mirip di sini .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Server mysql di MAMP tidak bisa dijalankan

  2. Bagaimana saya bisa men-debug mengapa kueri MySQL paling sederhana mengembalikan false?

  3. default kolom dengan string kosong

  4. Django:Kesalahan sintaks MySQL saat meneruskan parameter ke kueri SQL mentah

  5. Cara melewatkan string sebagai klausa WHERE di MYSQL