mysql select left [outer] join_sequelize-typescript 子查询、分页、order、like、fn

0. 实体结构

0.1 MySQL:

/*Table structure for table `book` */

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (

`rid` INT(11) NOT NULL,

`authorId` INT(11) DEFAULT NULL,

PRIMARY KEY (`rid`),

KEY `FK_person_id` (`authorId`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

/*Table structure for table `person` */

DROP TABLE IF EXISTS `person`;

CREATE TABLE `person` (

`rid` INT(11) NOT NULL AUTO_INCREMENT,

`name` CHAR(50) DEFAULT NULL,

PRIMARY KEY (`rid`)

) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

0.2 Sequelize-typescript Model:

import {Table, Column, Model, Sequelize, ForeignKey, BelongsTo, HasMany } from 'sequelize-typescript';

@Table({

tableName: 'base_table'

})

export default class base_table extends Model{

@Column({

primaryKey: true,

autoIncrement: true

})

rid: number;

}

@Table({

tableName: 'person'

})

export default class person extends base_table {

@Column

name:string;

@HasMany(() => book)

book: book[];

}

@Table({

tableName: 'book'

})

export default class book extends base_table {

@ForeignKey(() => person)

@Column

authorId: number;

@BelongsTo(() => person)

person:person;

}

1. 嵌套子查询

MySQL:

SELECT

`person`.*,

(select count(*)

from book

where person.rid = book.authorId) AS `bookCount`

FROM `person`;

sequelize-typescript:

let options = {

attributes:['person.*',

[

Sequelize.literal("(select count(*) from book where person.rid = book.authorId)"),

'bookCount'

]]

};

person.findAndCountAll(options)

.then(result => {

console.log('result.rows:',result.rows)

})

2. LEFT OUTER JOIN

MySQL:

SELECT

`person`.`rid`,

`person`.`name`,

`book`.`rid` AS `book.rid`,

`book`.`authorId` AS `book.authorId`

FROM `person`

LEFT OUTER JOIN `book`

ON `person`.`rid` = `book`.`authorId`;

typescript:

let options = {

include:[{model:book}]

}

person.findAndCountAll(options).then(results => {

results.rows.forEach((item, index) => {

console.log('item:',item)

})

})

3. 分页查询

MySQL:

SELECT `rid`, `authorId`

FROM `book`

LIMIT 0, 10;

sequelize-typescript:

let currentPage = 1;

let pageSize = 10;

let options ={

raw:true,

offset:(currentPage - 1) * pageSize,

limit:pageSize

}

book.findAndCount(options)

.then(result => {

result.rows.forEach((item, index) => {

console.log('item:',item)

})

})

4. order

MySQL:

SELECT `rid`, `name`

FROM `person`

ORDER BY `rid` DESC;

sequelize-typescript:

let options = {

raw:true,

order:[['rid', 'DESC']]

}

person.getList(options)

.then(result =>{

console.log('result:',result)

})

5. like操作符

MySQL:

SELECT `rid`, `name`

FROM `person`

WHERE `name` LIKE '%asa%';

sequelize-typescript:

let options = {

where: {

name: {

[Sequelize.Op.like]:'%'+'asa'+'%'

}

}

}

person.findAndCountAll(options)

.then(result => {

console.log('result:',result);

})

6. Function

MySQL:

UPDATE `person`

SET

`rid`=1,

`name`=md5("222")

WHERE `rid` = 1

sequelize-typescript:

let options = {

where:{rid:1}

}

let person_item= {

rid:1,

name:Sequelize.literal('md5("222")')

}

person.update(person_item,options)

.then(result => {

console.log('result:',result)

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值