gpt4 book ai didi

sql - 将 linq with All 转换为 SQL

转载 作者:行者123 更新时间:2023-12-03 16:01:38 25 4
gpt4 key购买 nike

我有表A、B、C

B 与 A 多对一相关

我想找到所有 A,其中 C 是 B 的完整子集。

下面的 LINQ 查询(伪代码)代表我想要得到的。

class A
{
public B[] Bs { get; set; }
}

class B
{
public string Text { get; set; }
}

class C
{
public string Text { get; set; }
}

private static IEnumerable<A> Search(C[] C, A[] A)
{
return from a in A
where C.All(c => a.Bs.Any(b => SomeCondition(b, c)))
select a;
}

private static bool SomeCondition(B b, C c)
{
//There we comparing B and C
throw new NotImplementedException();
}

表结构如下

A ( a_ID INT PRIMARY KEY )
B ( b_ID INT PRIMARY KEY, a_ID INT, Text NVARCHAR(MAX) )
C ( c_ID INT PRIMARY KEY, Text NVARCHAR(MAX) )

我需要得到所有 A,其中 B 匹配所有 C。

例子

A | a_ID |
| 1 |
| 2 |
| 3 |

B | b_ID | a_ID | Text |
| 1 | 1 | Cat |
| 2 | 1 | Dog |
| 3 | 1 | Rabbit|
| 4 | 2 | Cat |
| 5 | 2 | Cat | -- B can contain duplicates
| 6 | 2 | Rabbit|

C | c_ID | Text |
| 1 | Cat |
| 2 | Dog |

输出

| a_ID |
| 1 |

最佳答案

UPDATED3:计算不同的 c_id

SELECT b.a_id
FROM b
JOIN c ON b.Text = c.Text
GROUP BY b.a_id
HAVING COUNT(distinct c.c_id) = (SELECT COUNT(*) FROM C)

输出:

| A_ID |
--------
| 1 |

这是一个 sqlfiddle example

关于sql - 将 linq with All 转换为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15262087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com