据我所知,在 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%')
},
...
]
}
看起来不太好。我可以用其他更好的方式做到这一点吗?
其他方式。
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%'
)