【问题标题】:Query results based on multiple records using compound primary key使用复合主键基于多条记录查询结果
【发布时间】:2012-06-18 18:51:54
【问题描述】:

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

我能够从网格视图中获取选定(选中)行的主键,现在需要从数据库中检索这些选定复合主键的相应记录。

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

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

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

提前致谢。

尼基

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

这是我正在做的一个例子:

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

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

使用 GRIDVIEW 1 的第 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 页上的按钮(例如“取消记录”)后,我需要获取这些行,以显示到另一个页面,如下所示:

使用 GRIDVIEW 2 的第 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 |. . .         |_______

(其中原因列是一个文本框)

【问题讨论】:

  • 您是否从一个具有使用 3 个字段的复合主键的表中进行选择?如果没有,请发布所涉及表的架构定义
  • 我不确定您使用的术语是否正确...您是否基于视图中的选定列生成 sql 语句并且只是连接 串在一起???
  • @Martin Wilson,N West,我已经更新了这个问题,如果可以解决的话。
  • @jonnyGold。我该怎么做?
  • @nikib,您可以通过单击答案正文顶部旁边的灰色轮廓复选标记来接受答案。

标签: sql gridview join primary-key


【解决方案1】:

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

从 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 ..等等

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多