Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Sql server 续集查询,多对多关系问题_Sql Server_Node.js_Many To Many_Sequelize.js - Fatal编程技术网

Sql server 续集查询,多对多关系问题

Sql server 续集查询,多对多关系问题,sql-server,node.js,many-to-many,sequelize.js,Sql Server,Node.js,Many To Many,Sequelize.js,我目前有两个MSSQL表。“项目”表(包含项目“名称”)和“托盘”表(包含托盘“条形码”)。我有一个称为“ItemPallets”的连接表,它将多个项目链接到多个托盘 “项目托盘”包含项目Id(主键)和托盘Id(主键)以及“序列号” 数据的一个例子可以是: 项目 + -- + ---- + | Id | Name | + -- + ---- + | 1 | 123 | + -- + ---- + + -- + ------- + | Id | Barcode | + -- + ------

我目前有两个MSSQL表。“项目”表(包含项目“名称”)和“托盘”表(包含托盘“条形码”)。我有一个称为“ItemPallets”的连接表,它将多个项目链接到多个托盘

“项目托盘”包含项目Id(主键)和托盘Id(主键)以及“序列号”

数据的一个例子可以是:

项目

+ -- + ---- +
| Id | Name |
+ -- + ---- +
| 1  | 123  |
+ -- + ---- +
+ -- + ------- +
| Id | Barcode |
+ -- + ------- +
| 1  | ABC     |
| 2  | DEF     |
+ -- + ------- +
+ -- + ------ + -------- + ------------- +
| Id | ItemId | PalletId | Serial Number |
+ -- + ------ + -------- + ------------- +
| 1  | 1      | 1        | a400          |
| 2  | 1      | 1        | a401          |
| 3  | 1      | 1        | a402          |
| 4  | 1      | 2        | a403          |
+ -- + ------ + -------- + ------------- +
托盘

+ -- + ---- +
| Id | Name |
+ -- + ---- +
| 1  | 123  |
+ -- + ---- +
+ -- + ------- +
| Id | Barcode |
+ -- + ------- +
| 1  | ABC     |
| 2  | DEF     |
+ -- + ------- +
+ -- + ------ + -------- + ------------- +
| Id | ItemId | PalletId | Serial Number |
+ -- + ------ + -------- + ------------- +
| 1  | 1      | 1        | a400          |
| 2  | 1      | 1        | a401          |
| 3  | 1      | 1        | a402          |
| 4  | 1      | 2        | a403          |
+ -- + ------ + -------- + ------------- +
项目托盘

+ -- + ---- +
| Id | Name |
+ -- + ---- +
| 1  | 123  |
+ -- + ---- +
+ -- + ------- +
| Id | Barcode |
+ -- + ------- +
| 1  | ABC     |
| 2  | DEF     |
+ -- + ------- +
+ -- + ------ + -------- + ------------- +
| Id | ItemId | PalletId | Serial Number |
+ -- + ------ + -------- + ------------- +
| 1  | 1      | 1        | a400          |
| 2  | 1      | 1        | a401          |
| 3  | 1      | 1        | a402          |
| 4  | 1      | 2        | a403          |
+ -- + ------ + -------- + ------------- +
这意味着托盘ABC中有三个项目的名称为123,分别序列号为a400、a401和a402,托盘DEF中有一个项目的名称为123,序列号为a403

我正在尝试取回与项目托盘关联的所有ItemPallet行,即Item.Pallet[0]。ItemPallet应包含一个数组,我希望该数组包含三行,序列号为a400、a401和a402

然而,虽然我的阵列包含两个托盘,为什么每个托盘只包含一个序列号

我目前使用的代码如下:

models.Item.findOne({
  where: {id: 1},
  include: [
    { model: models.Pallet }
  ]
});

代码生成的查询返回三行-您可以通过将
raw:true
添加到
where
include
旁边的选项中看到这一点。我设法得出结论,Sequelize只考虑最后返回的行-如果您将查询的
顺序
更改为相反,您将获得序列号为a403的
ItemPallets

至于现在,我建议你换一种方式

models.ItemPallets.findAll({
    where: {
        ItemId: 1
    }
}).then((itemPallets) => {
    // here you get all ItemPallets of Item with id 1
});
我将尝试找出为什么Sequelize在这种情况下会这样做,如果我知道任何有用的信息,请告诉您

编辑

根据您的评论,也可以通过查询
表来实现这一点

models.Item.findByPrimary(1, {
    include: [ models.ItemPallets ]
}).then((itemWithItemPallets) => {
    // here you get (example output) { id: 1, ItemPallets: [{ id: 1, ItemId: 1, PalletId: 1, serialNumber: a400 }, { ... }]
});
上面的查询没有

`JOIN ItemsPallets ON ItemsPallets.ItemId=Item.id,其中Item.id=1`

因此它返回
Item
Item
的所有
itempalllets
,id=1

对不起,我的错误。查询实际上返回两行,每个托盘一行。这很好,但是,我希望看到每个托盘内的每个序列号。我需要查询该项目并获取该项目的所有序列号。这需要在item表上执行,因为我有其他联接和item表特有的其他where子句。是的,我的错误也是返回两行,因为在
ItemPallets
中有两个项目,但是它仍然在每个
Pallet
对象上只返回单个
ItemPallet
。我已经更新了答案,向您展示了如何通过查询
Item
model来实现