使用来自两个数据库的自动增量 ID 连接来自两个表的数据

Posted

技术标签:

【中文标题】使用来自两个数据库的自动增量 ID 连接来自两个表的数据【英文标题】:Join data from two tables with autoincrement id from two databases 【发布时间】:2012-05-24 12:29:57 【问题描述】:

我想连接来自两个数据库的表中的数据。一个用预定义的值(itemId、itemName)归档,另一个由用户填写(itemId、itemName、userId)。属性 itemId 和 itemName 相同,从第一个表我们选择所有数据,从第二个我们通过 userId 选择数据并将这两个结果结合起来。

应该区分加入的数据,因为 id 是自动递增的,并且可以相同(加倍)。我们想用这些数据填充下拉列表,例如使用数据源和字典(int 是 itemId,字符串是 itemName),我们只能在 dropDownList 中有 valueFiled 和 valueText,但是这两个表的 id 可能是相同的,我们不要t 知道从哪个表中选择的项目是 id。

有没有什么优雅的方式来连接这个,也许是我们总是在用户登录时将这两个表连接到临时表等中的临时表......

感谢您的回答

【问题讨论】:

您能否给出一组简单的示例数据,例如每个表中的 4 行,然后是您要从查询中查找的结果。最初听起来您想要一个非常简单的连接 - 但清晰会有所帮助。 除了 Nt 的问题,你问的是 mysql 还是 SQL Server(或两者)?以及哪个版本?这可能会影响答案。 每个表中或两个表中是否有重复项? table1(id, name -> 1 apple, 2banana, 3 orange) table2(id, name, username -> 1 mango, 2 pineapple, 3 strawberry) 在下拉列表中 我想设置数据源dictionary 所以我可以通过 id 从表中获取所选项目是问题所在,因为苹果和芒果具有相同的 id,如果我从数据库中选择 1,则有 2 个项目具有此 id。但我不能在 ddl 中为 table1/table2 设置标志。我用的是mssql和sql server 2008,表中没有重复,名字是唯一的 也许我可以为 table1 添加 id 0 和为 table2 添加 1 因为当我将数据源设置为 dropDownList 他创建 id(string) name(string) 作为值/文本所以我可以附加这两个数字(作为我的类型),我现在可以通过这个项目所在的表格中的最后一个数字来起泡,并且我不会在 dropDownList 中重复 id。 【参考方案1】:

我认为您正在寻找工会。使用文字值来标识来源。

select 'predefined' as source, itemid, itemname
  from predefined_values_table
union all
select 'user', itemid, itemname
  from user_supplied_values_table
  where userid = ?;

如果您只能容纳两列,则可以使用类似的东西。但是您必须撤消字符串连接才能获得 id 号。

select 'p:' || itemid, itemname
  from predefined_values_table
union all
select 'u:' || itemid, itemname
  from user_supplied_values_table
  where userid = ?;

【讨论】:

这对我来说不是最好的解决方案,因为联合都加入两个表并重复 id,如果我按 id 选择某些东西并且有两个 id 1,我怎么知道哪一个来自 table1,哪一个来自table2 ...我不能在 ddl 中设置标志,因为它只能有文本/值字段,所以如果我设置像数据源这样的字典,这会设置 id 和 name 通过查看“源”列,您可以知道它来自哪个表。

以上是关于使用来自两个数据库的自动增量 ID 连接来自两个表的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用来自两个不同数据库的两个表使用 JOOQ 构建左连接查询

连接来自两个不同数据库的 3 个表?

连接来自不同数据库的两个表

如何使用来自两个不同表SQLite的元素更新/删除

连接来自两个不同表的两列

我可以向这个 UNION 添加一个新的自动增量列吗?