在 TypeORM 中使用 AND 进行多重 OR 的更好方法?

问题描述 投票:0回答:1

据我所知,在 TypeOrm 中,

OR
运算符将是带有案例的
Array

{
  where: [...]
}

如果

OR
在 1 个字段上,那就可以了。但如果我有这样的查询:
SELECT * FROM users WHERE (age = 20 OR age = 22 OR age = 23) AND (name LIKE '%kan%' OR username LIKE '%kan%')

这意味着我必须传递一个包含 6 个(3 年龄 * 2 名称/用户名)对象的数组,以匹配我想要的所有情况

{
  where: [
    {
      age: 20,
      name: Like('%kan%')
    },
    {
      age: 20,
      username: Like('%kan%')
    },
    {
      age: 22,
      name: Like('%kan%')
    },
    ...
  ]
}

看起来不太好。我可以用其他更好的方式做到这一点吗?

sql orm typeorm
1个回答
0
投票

其他方式。

AsIs:
SELECT * FROM users WHERE (age = 20 OR age = 22 OR age = 23) AND (name LIKE '%kan%' OR username LIKE '%kan%')
ToBe(ORACLE):
SELECT *
FROM users a 
WHERE 1=1
AND EXISTS (
  SELECT 'x' FROM DUAL WHERE a.age = 20
  UNION ALL
  SELECT 'x' FROM DUAL WHERE a.age = 22
  UNION ALL
  SELECT 'x' FROM DUAL WHERE a.age = 23
)
AND EXISTS (
  SELECT 'x' FROM DUAL WHERE a.name LIKE '%kan%'
  UNION ALL
  SELECT 'x' FROM DUAL WHERE a.username LIKE '%kan%'
)
© www.soinside.com 2019 - 2024. All rights reserved.