Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将SQL查询转换为具有多个表的sequelize查询_Mysql_Node.js_Sequelize.js - Fatal编程技术网

Mysql 将SQL查询转换为具有多个表的sequelize查询

Mysql 将SQL查询转换为具有多个表的sequelize查询,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,几天来,我一直在尝试将我认为相对简单的SQL查询转换为sequelize格式。我似乎一辈子也弄不明白。我对续集比较陌生,我的SQL技能也需要一些帮助 非常感谢您的帮助,谢谢 以下是我在sequelize中努力实现的SQL查询(它适用于我尝试执行的操作): SELECT book.id, book.author, book.title, book_type.type, book_sub_type.sub_ty

几天来,我一直在尝试将我认为相对简单的SQL查询转换为sequelize格式。我似乎一辈子也弄不明白。我对续集比较陌生,我的SQL技能也需要一些帮助

非常感谢您的帮助,谢谢

以下是我在sequelize中努力实现的SQL查询(它适用于我尝试执行的操作):

    SELECT 
        book.id,
        book.author,
        book.title,
        book_type.type,
        book_sub_type.sub_type,
        book_location.location,
        book_language.language
    FROM book
    INNER JOIN book_type ON book.book_type_id = book_type.id
    INNER JOIN book_sub_type ON book.book_sub_type_id = book_sub_type.id
    INNER JOIN book_location ON book.book_location_id = book_location.id
    INNER JOIN book_language ON book.book_language_id = book_language.id
    WHERE
        book.author LIKE '%history%' OR
        book.title LIKE '%history%' OR
        book_type.type LIKE '%history%' OR
        book_sub_type.sub_type LIKE '%history%' OR
        book_language.language LIKE '%history%' OR
        book_location.location LIKE '%history%'
    ORDER BY book_type.type, book_sub_type.sub_type;
这是我所得到的(这个sequelize查询返回0个结果,因为它在所有列中搜索子字符串“history”,而不是至少一列):

我的模式如下:

`book` table columns:
`id`, `author`, `title`, `book_type_id`, `book_sub_type_id`, 
`book_language_id`, `book_location_id`

`book_type` table columns:
`id`, `type`

`book_sub_type` table columns:
`id`, `sub_type`

`book_location` table columns:
`id`, `location`

`book_language` table columns:
`id`, `language`
在sequelize中,我建立了以下关系:

    Book.belongsTo(BookType);
    Book.belongsTo(BookSubType);
    Book.belongsTo(BookLanguage);
    Book.belongsTo(BookLocation);
    BookType.hasMany(Book);
    BookSubType.hasMany(Book);
    BookLanguage.hasMany(Book);
    BookLocation.hasMany(Book);
输出应为7列:
book.id、book.author、book.title、book_type.type、book_sub_type.sub_type、book_location.location、book_language.language

续集使用联接中的条件构建SQL,因此这不是一个好方法。您应该从includes中删除所有
where
条件。在续集中有一种方法谢谢你的回答,我担心我将不得不使用原始SQL来实现这一点。
    Book.belongsTo(BookType);
    Book.belongsTo(BookSubType);
    Book.belongsTo(BookLanguage);
    Book.belongsTo(BookLocation);
    BookType.hasMany(Book);
    BookSubType.hasMany(Book);
    BookLanguage.hasMany(Book);
    BookLocation.hasMany(Book);
 where: {
      $or: [{
        '$book.sub_type$$': 'history'
      }, {
        '$book_type.type$': 'history'
      }]
 } 
where: {
     [Op.or]: [{
         Sequelize.literal(`book_type.type LIKE ${history}`)
     }, {
         Sequelize.literal(`book_sub_type.sub_type LIKE ${history}`)
     }]
}