我一直在寻找这个问题的解决方案好几个小时但我还没有。
我有一个包含4个数据表的数据集:
DS
+Parent
++Child1
++Child2
++Child3
我在数据集上定义了关系,使用pk将父项链接到子项。
问题是当我填充(使用dataadapter.fill方法)子表时,数据库返回所有记录,而不仅仅是与父项相关的记录,因此我的数据表大于它们需要的数据并正在采取加载一段时间,因为移动设备的代码,这是一个溢价。
我不能像对待父对象一样对孩子使用WHERE过滤器,因为这取决于父数据。
在填充子表时,是否有某种方法只返回与父项相关的记录?
我必须在这里看一些东西,因为我觉得这会很简单吗?!?
谢谢你们。
编辑:构建SELECT命令时唯一已知的ID是父表的单个公共标识符。过滤子表并不好,因为只有父PK才存在这些数据,这是未知的。
答案 0 :(得分:0)
您已经说过使用父PK = child fk链接到子表,因此您将在子表中有一个parentid列。 因此,填充父表的查询的格式为SELECT * FROM parent WHERE parentid = @parentid,填充子表的查询格式为SELECT * FROM child1 WHERE parentid = @parentid
答案 1 :(得分:0)
如果您只知道父ID,并且这不足以确定子表中需要哪些记录,那么您可以尝试使用封装业务逻辑的嵌套选择:
SELECT *
FROM child1 c
WHERE c.myforeignkey in
(
select p.myforeignkey
from parent p
where p.parentid = ...
)
或许是LEFT JOIN?
SELECT c.*
FROM child1 c
LEFT JOIN parent p on c.commonid = p.commonid
WHERE p.parentid = ...