- 优化 子查询别名为 a 的情况;#1201

This commit is contained in:
2881099
2022-08-02 18:55:18 +08:00
parent 66e6f39086
commit 4c2fab706c
9 changed files with 53 additions and 23 deletions

View File

@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
FROM ""pgarray_tomany_user_lazyloading_notfound"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_role_lazyloading_notfound"" b
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
FROM ""pgarray_tomany_role_lazyloading_notfound"" sub_b
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
limit 1))", users5Select.ToSql());
var users5 = users5Select.ToList();
Assert.Equal(4, users5.Count);
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
FROM ""pgarray_tomany_role_lazyloading_notfound"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_user_lazyloading_notfound"" b
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
FROM ""pgarray_tomany_user_lazyloading_notfound"" sub_b
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
limit 1))", roles5Select.ToSql());
var roles5 = roles5Select.ToList();
Assert.Equal(2, roles5.Count);

View File

@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
FROM ""pgarray_tomany_user_lazyloading"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_role_lazyloading"" b
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
FROM ""pgarray_tomany_role_lazyloading"" sub_b
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
limit 1))", users5Select.ToSql());
var users5 = users5Select.ToList();
Assert.Equal(4, users5.Count);
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
FROM ""pgarray_tomany_role_lazyloading"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_user_lazyloading"" b
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
FROM ""pgarray_tomany_user_lazyloading"" sub_b
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
limit 1))", roles5Select.ToSql());
var roles5 = roles5Select.ToList();
Assert.Equal(2, roles5.Count);

View File

@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
FROM ""pgarray_tomany_user_normal"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_role_normal"" b
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
FROM ""pgarray_tomany_role_normal"" sub_b
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
limit 1))", users5Select.ToSql());
var users5 = users5Select.ToList();
Assert.Equal(4, users5.Count);
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
FROM ""pgarray_tomany_role_normal"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_user_normal"" b
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
FROM ""pgarray_tomany_user_normal"" sub_b
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
limit 1))", roles5Select.ToSql());
var roles5 = roles5Select.ToList();
Assert.Equal(2, roles5.Count);

View File

@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" b
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" sub_b
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
limit 1))", users5Select.ToSql());
var users5 = users5Select.ToList();
Assert.Equal(4, users5.Count);
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" b
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" sub_b
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
limit 1))", roles5Select.ToSql());
var roles5 = roles5Select.ToList();
Assert.Equal(2, roles5.Count);

View File

@ -64,8 +64,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
FROM ""pgarray_tomany_user_observablecollection"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_role_observablecollection"" b
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
FROM ""pgarray_tomany_role_observablecollection"" sub_b
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
limit 1))", users5Select.ToSql());
var users5 = users5Select.ToList();
Assert.Equal(4, users5.Count);
@ -83,8 +83,8 @@ WHERE (exists(SELECT 1
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
FROM ""pgarray_tomany_role_observablecollection"" a
WHERE (exists(SELECT 1
FROM ""pgarray_tomany_user_observablecollection"" b
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
FROM ""pgarray_tomany_user_observablecollection"" sub_b
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
limit 1))", roles5Select.ToSql());
var roles5 = roles5Select.ToList();
Assert.Equal(2, roles5.Count);

View File

@ -850,6 +850,13 @@ WHERE (((a.[Name]) in (SELECT s.[Title] as1
.Any()
).Any()
).ToList();
var sqlAliasA = select.Where(p => select.Where(a => a.Id == p.Id).Any()).ToSql();
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
FROM [tb_topic22] a
WHERE (exists(SELECT TOP 1 1
FROM [tb_topic22] sub_a
WHERE (sub_a.[Id] = a.[Id])))", sqlAliasA);
}
[Fact]
public void GroupBy()

View File

@ -1143,8 +1143,8 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
});
Assert.Equal(@"SELECT a.""Id"" as1, ifnull((SELECT max(a.""Guid"")
FROM ""TestTypeInfo_01"" a), 0) as2, exists(SELECT 1
FROM ""TestTypeInfo_01"" b
WHERE (b.""ParentId"" = a.""Id"") AND (b.""Name"" = 'xx')
FROM ""TestTypeInfo_01"" sub_b
WHERE (sub_b.""ParentId"" = a.""Id"") AND (sub_b.""Name"" = 'xx')
limit 0,1) as3, exists(SELECT 1
FROM ""TestTypeInfo_01"" b
WHERE (b.""Name"" = 'xx') AND (b.""ParentId"" = a.""Id"")