【问题标题】:Making a select with an array使用数组进行选择
【发布时间】:2021-03-02 16:57:53
【问题描述】:

您好,我有一个带有对象的数组,每个对象都有我选择所需的属性:

在这种情况下,它是另一个咨询 typeorm 的结果 " const CompaniesRelation: Array = await getRepository(CompanyRelation).find({ where:{ UserId: data.UserId, IsActive: true} });"

Companies: Array = [{CompanyId="a"}{CompanyId="b"}{CompanyId="c"}];

我需要选择与公司中的 ID 匹配的所有数据,因此我需要创建一个类似的 SQL:

const CompanyData: Array = SELECT * 
FROM Company 
INNER JOIN Company.CompanyId = CompaniesRelation[].CompanyId;

但它在输入时抛出错误,¿我怎样才能将每个 objetc 访问到数组中以进行匹配?

最后我应该将它转换为 sql 到 typeOrm,但我是新的并首先在 SQL 中解决它应该有助于我转换到 typeorm

【问题讨论】:

  • 您好,您是否尝试使用您定义的数组从数据库、公司行查询?
  • 另外,您使用的是打字稿吗?如果是这样,请确保您的代码在语法上是正确的...
  • @AshwynHorton 是的,我正在尝试这样做,是的,我正在使用 typescrypt,让我编辑
  • @AshwynHorton 我添加了一些细节

标签: sql typescript


【解决方案1】:

好的,让我们考虑一下我们必须正确处理什么:

所以首先我们有一个声明,其中包含这样的公司列表:

const CompaniesRelation: Array = await getRepository(CompanyRelation).find({
  where: {
    UserId: data.UserId,
    IsActive: true
  }
});

最后是这样的:

[ { CompanyId: 'a' }, { CompanyId: 'b' }, { CompanyId: 'c' } ]

现在我们想从带有这些公司 ID 的 SQL 数据库中获取公司列表。

所以查询应该是这样的:

// so first we re map the relation to an array of strings...
const ids: Array<string> = CompaniesRelation.map(c => c.CompanyId);

// then use it in the query, note the string interpolation for the query
const query: string = `SELECT * FROM Company WHERE CompanyId IN(${JSON.stringify(ids).slice(1, -1)});`;

我认为这不会涵盖您遇到的问题的范围,但我希望它会有所帮助......请随时询问

【讨论】:

  • 我认为这行得通,实际上你为我简化了下一步(将其更改为 typeorm),当关于连接时,orm 的语法让我有点困惑。所以只是为了更明确的主题,这个sql可以像同样的方式工作吗? SELECT * FROM Company INNER JOIN Company.CompanyId = CompanyRelation.CompanyId INNER JOIN CompanyRelation.UserID = 'UserId'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 2021-11-02
  • 2014-01-29
相关资源
最近更新 更多