我正在使用Sequelize,并试图从它构造的查询中学习。我在几个模型之间有一些复杂的一对多的关系,所以我遇到了这样的查询:
SELECT `ScrumBoard`.`id`, `ScrumBoard`.`title`, `ScrumBoard`.`createdAt`, `ScrumBoard`.`updatedAt`, `ScrumLists`.`id` AS `ScrumLists.id`, `ScrumLists`.`title` AS `ScrumLists.title`, `ScrumLists`.`createdAt` AS `ScrumLists.createdAt`, `ScrumLists`.`updatedAt` AS `ScrumLists.updatedAt`, `ScrumLists`.`ScrumBoardId` AS `ScrumLists.ScrumBoardId`, `ScrumLists->ScrumCards`.`id` AS `ScrumLists.ScrumCards.id`, `ScrumLists->ScrumCards`.`title` AS
`ScrumLists.ScrumCards.title`, `ScrumLists->ScrumCards`.`content` AS `ScrumLists.ScrumCards.content`, `ScrumLists->ScrumCards`.`createdAt` AS `ScrumLists.ScrumCards.createdAt`, `ScrumLists->ScrumCards`.`updatedAt` AS `ScrumLists.ScrumCards.updatedAt`, `ScrumLists->ScrumCards`.`ScrumListId` AS `ScrumLists.ScrumCards.ScrumListId`, `ScrumLists->ScrumCards->ScrumComments`.`id` AS `ScrumLists.ScrumCards.ScrumComments.id`, `ScrumLists->ScrumCards->ScrumComments`.`title` AS `ScrumLists.ScrumCards.ScrumComments.title`, `ScrumLists->ScrumCards->ScrumComments`.`content` AS `ScrumLists.ScrumCards.ScrumComments.content`, `ScrumLists->ScrumCards->ScrumComments`.`createdAt` AS `ScrumLists.ScrumCards.ScrumComments.createdAt`, `ScrumLists->ScrumCards->ScrumComments`.`updatedAt` AS `ScrumLists.ScrumCards.ScrumComments.updatedAt`, `ScrumLists->ScrumCards->ScrumComments`.`ScrumCardId` AS `ScrumLists.ScrumCards.ScrumComments.ScrumCardId`, `ScrumLists->ScrumCards->Labels`.`id` AS `ScrumLists.ScrumCards.Labels.id`, `ScrumLists->ScrumCards->Labels`.`title` AS `ScrumLists.ScrumCards.Labels.title`, `ScrumLists->ScrumCards->Labels`.`color` AS `ScrumLists.ScrumCards.Labels.color`, `ScrumLists->ScrumCards->Labels`.`createdAt` AS `ScrumLists.ScrumCards.Labels.createdAt`, `ScrumLists->ScrumCards->Labels`.`updatedAt` AS `ScrumLists.ScrumCards.Labels.updatedAt`, `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`createdAt` AS `ScrumLists.ScrumCards.Labels.scrumcard_labels.createdAt`, `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`updatedAt` AS `ScrumLists.ScrumCards.Labels.scrumcard_labels.updatedAt`, `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`LabelId` AS `ScrumLists.ScrumCards.Labels.scrumcard_labels.LabelId`, `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`ScrumCardId` AS `ScrumLists.ScrumCards.Labels.scrumcard_labels.ScrumCardId` FROM `ScrumBoards` AS `ScrumBoard` LEFT OUTER JOIN `ScrumLists` AS `ScrumLists` ON `ScrumBoard`.`id` = `ScrumLists`.`ScrumBoardId` LEFT OUTER JOIN `ScrumCards` AS `ScrumLists->ScrumCards` ON `ScrumLists`.`id` = `ScrumLists->ScrumCards`.`ScrumListId` LEFT OUTER JOIN `ScrumComments` AS `ScrumLists->ScrumCards->ScrumComments` ON `ScrumLists->ScrumCards`.`id` = `ScrumLists->ScrumCards->ScrumComments`.`ScrumCardId` LEFT OUTER JOIN ( `scrumcard_labels` AS `ScrumLists->ScrumCards->Labels->scrumcard_labels` INNER JOIN `Labels` AS `ScrumLists->ScrumCards->Labels` ON `ScrumLists->ScrumCards->Labels`.`id` = `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`LabelId`) ON `ScrumLists->ScrumCards`.`id` = `ScrumLists->ScrumCards->Labels->scrumcard_labels`.`ScrumCardId`
WHERE `ScrumBoard`.`id` = '1'; 查询本身并不重要,但我想理解"->“操作符的含义,如:
ScrumLists->ScrumCards.contentASScrumLists.ScrumCards.content
发布于 2020-02-27 13:58:46
在这种情况下,->没有特殊的含义。它只是属于在查询中定义的表别名,在这里:
LEFT OUTER JOIN `ScrumCards` AS `ScrumLists->ScrumCards`一旦定义了别名,它将用于引用查询中的相应表,如下所示:
`ScrumLists->ScrumCards`.`id`请注意,使用这样的表别名确实是一个错误的选择。->在MySQL中很有意义(它是JSON操作符,是JSON_EXTRACT()的同义词)。因此,在表别名中使用它需要每次使用它时引用标识符。我强烈建议将表别名更改为一些不那么棘手的内容,并且不需要引用(ScrumLists_ScrumCards就足够了)。
https://stackoverflow.com/questions/60434867
复制相似问题