使用复合主键基于多个记录查询结果

时间:2012-06-18 18:51:55

标签: sql gridview join primary-key

根据所选主键从数据库中获取记录的最佳方法是什么?

我能够从gridview获取所选(已检查)行的主键,现在需要从数据库中检索所选复合主键的相应记录。

如果行只使用一个主键,则会更容易。我可以简单地连接主键(逗号分隔)并在WHERE IN子句中使用它。但是这些行使用了三个主键(int,int,string)

我正在考虑使用SELECT JOIN(每个主键一个选择,然后加入所有选择),但我不确定这是否是最优化的方法。

处理此问题的最佳方法是什么?

提前致谢。

尼基

[更新] - 无法回复个别评论,我可能还没有足够的权限,所以请在此处更新帖子以便明确。

以下是我正在做的事情的一个例子:

来自具有复合键的一个数据库表的数据:

TABLE1
KeyCol1 INT (Primary Key),
KeyCol2 STRING (Primary Key),
KeyCol3 INT (Primary Key),
Col4    Decimal,
Col5    STRING,
Other columns . . .

第1页使用GRIDVIEW 1:

Sel |KeyCol1 |KeyCol2 |KeyCol3 |Col4  |Col5          |Other Columns . . .
[ ] |100     |CODE1   |01      |10.05 |Description 1 |. . .
[/] |100     |CODE1   |02      | 5.03 |Description 2 |. . .
[ ] |100     |CODE2   |01      |12.45 |Description 4 |. . .
[/] |102     |CODE1   |01      |21.50 |Description 1 |. . .
[/] |102     |CODE2   |01      | 9.10 |Description 5 |. . .
[/] |102     |CODE3   |03      | 7.15 |Description 1 |. . .

。 。 。 (其中Sel列是一个复选框,并且[/]被选中)

然后点击第1页上的按钮(例如“取消记录”)后,我需要获取这些行,以显示到这样的另一页:

第2页,使用GRIDVIEW 2

KeyCol1 |KeyCol2 |KeyCol3 |Col4  |Other Colums  |Reason
100     |CODE1   |02      | 5.03 |. . .         |_______
102     |CODE1   |01      |21.50 |. . .         |_______
102     |CODE2   |01      | 9.10 |. . .         |_______
102     |CODE3   |03      | 7.15 |. . .         |_______

(其中Reason列是文本框)

1 个答案:

答案 0 :(得分:1)

您可以在单个查询中执行此操作,方法是为每个三个id(即gridview中的每个选定行)添加OR子句。例如:

SELECT FROM Table1 WHERE(KeyCol1 = val1-1 AND KeyCol2 = val1-2 AND KeyCol3 = val1-3)OR(KeyCol1 = val2-1 AND KeyCol2 = val2-2 AND KeyCol3 = val2-3)OR ..等