Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направите заявки за присъединяване с помощта на Sequelize на Node.js

Въпреки че приетият отговор не е технически грешен, той не отговаря на първоначалния въпрос, нито на последващия въпрос в коментарите, което дойдох тук да търся. Но го разбрах, така че ето.

Ако искате да намерите всички публикации, които имат потребители (и само тези, които имат потребители), където SQL ще изглежда така:

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

Което семантично е същото като оригиналния SQL на OP:

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

тогава това е, което искате:

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

Необходимата настройка на true е ключът към създаването на вътрешно съединение. Ако искате ляво външно присъединяване (където получавате всички публикации, независимо дали има свързан потребител), тогава променете задължително на false или го оставете изключено, тъй като това е по подразбиране:

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

Ако искате да намерите всички публикации, принадлежащи на потребители, чиято година на раждане е 1984, трябва:

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

Имайте предвид, че изискваното е вярно по подразбиране веднага щом добавите клауза where.

Ако искате всички публикации, независимо дали има прикачен потребител, но ако има потребител, тогава само тези, родени през 1984 г., след това добавете задължителното поле обратно в:

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

Ако искате всички публикации, чието име е „Sunshine“ и само ако принадлежи на потребител, който е роден през 1984 г., трябва да направите това:

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

Ако искате всички публикации, чието име е „Sunshine“ и само ако принадлежи на потребител, роден през същата година, която съответства на атрибута post_year в публикацията, трябва да направите това:

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

Знам, че няма смисъл някой да прави публикация в годината, в която е роден, но това е само пример - продължете с него. :)

Разбрах това (най-вече) от този документ:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Управление на потребителски акаунт, роли, разрешения, удостоверяване PHP и MySQL - част 3

  2. MySQL се проваля при:mysql ГРЕШКА 1524 (HY000):Приставката 'auth_socket' не е заредена

  3. Как да получите броя дни на разлика между две дати в MySQL?

  4. Заявката SELECT връща 1 ред от всяка група

  5. MySQL:избиране на редове, където колона е нула