0

我已经为这个问题寻找了几个小时的解决方案,但还没有,所以我在这里。

我有一个包含 4 个数据表的数据集:

    DS
    +Parent
    ++Child1
    ++Child2
    ++Child3

我在数据集上定义了使用 pk 将父级链接到子级的关系。

问题是当我填充(使用 dataadapter.fill 方法)子表时,数据库返回所有记录,而不仅仅是与父表相关的记录,所以我的数据表比它们需要的大并且需要一段时间才能加载,并且由于此代码适用于移动设备,因此这是一个溢价。

我不能像在父级上那样只对子级使用 WHERE 过滤器,因为这取决于父级数据。

有没有办法在填充子表时只返回与父级相关的记录?

我一定是在看这里的东西,因为我认为这将是简单的东西?!?

多谢你们。

编辑:在构建 SELECT 命令时唯一已知的 ID 是父表的单个公共标识符。这对过滤子表没有好处,因为这些数据不存在于子表中,只有父 PK 存在,这是未知的。

4

2 回答 2

0

您已经说过您正在使用 parent PK = child fk 链接到子表,因此您将在子表中有一个 parentid 列。因此,正如填充父表的查询的形式为 SELECT * FROM parent WHERE parentid = @parentid,填充子表的查询的形式为 SELECT * FROM child1 WHERE parentid = @parentid

于 2013-01-16T23:50:30.923 回答
0

如果您只知道父 ID,而这不足以确定子表中需要哪些记录,那么您可以尝试使用嵌套选择来封装您的业务逻辑:

SELECT * 
FROM child1 c
WHERE c.myforeignkey in 
    (
    select p.myforeignkey
    from parent p
    where p.parentid = ...
    )

也许是左连接?

SELECT c.* 
FROM child1 c
LEFT JOIN parent p on c.commonid = p.commonid
WHERE p.parentid = ...
于 2013-01-17T00:52:14.927 回答