如果两个列都有一个公共标识符,那么我如何映射表A和B中的两列,而这些列又可能在C列中有两个值
让我们说:
A
---
1 , 2
B
---
? , 3
C
-----
45, 2
45, 3
使用表C我知道id 2和3属于同一个项目(45),因此“?”表B中应为1。
什么查询可以做类似的事情?
编辑
省略了长版本。这真的很无聊/令人困惑
修改
我在这里发布一些输出。
来自此查询:
select distinct( rolein) , activityin from taskperformance@dm_prod where activityin in (
select activityin from activities@dm_prod where activityid in (
select activityid from activities@dm_prod where activityin in (
select distinct( activityin ) from taskperformance where rolein = 0
)
)
)
我有以下几个部分:
select distinct( activityin ) from taskperformance where rolein = 0
输出:
http://question1337216.pastebin.com/f5039557
select activityin from activities@dm_prod where activityid in (
select activityid from activities@dm_prod where activityin in (
select distinct( activityin ) from taskperformance where rolein = 0
)
)
输出:
http://question1337216.pastebin.com/f6cef9393
最后:
select distinct( rolein) , activityin from taskperformance@dm_prod where activityin in (
select activityin from activities@dm_prod where activityid in (
select activityid from activities@dm_prod where activityin in (
select distinct( activityin ) from taskperformance where rolein = 0
)
)
)
输出:
http://question1337216.pastebin.com/f346057bd
从第一次查询(来自taskperformance B)获取335的活动。
它出现在A的活动中。
但不是A中的任务表现(但相关活动:92,208,335,595)
结果中存在。相应的角色是:1
答案 0 :(得分:1)
对于任何给定的activityin
,似乎适用相同的rolein
值。因此,如果数据库A(db1)对于rolein / activityin关系至少有一个关联,则可以使用简单的一次性更新查询填充数据库B(db2):
UPDATE db2.taskperformance
SET db2.taskperformance.rolein =
(SELECT db1.taskperformance.rolein
FROM db1.taskperformance
WHERE db1.taskperformance.activityin = db2.taskperformance.activityin);
我强烈建议在运行查询之前先备份数据库,因为它会更改所有rolein
值,如果我的假设不正确,您可能会收到错误的数据。
修改强>
虽然我认为它可以在一个查询中完成,但它超出了我对sql的了解。但是我认为以下内容将起作用:创建一个临时表,其中包含数据库A中每个rolein
值的所有activityin
值。此表基本上成为活动表,除非您现在有数字替换{ {1}}值,可以查找以填充数据库B的activityid
缺失值。
rolein
从原始数据中得出:
CREATE TEMPORARY TABLE db2.ttable
SELECT db1.taskperformance.rolein, db1.activities.activityin
FROM db1.taskperformance, db1.activities
WHERE db1.taskperformance.activityin = db1.activities.activityin;
现在,您应该可以针对此临时表运行更新查询:
rolein activityin
1 1
1 2
2 3
2 4
3 6
3 7
3 7
如果数据库B中存在UPDATE db2.taskperformance
SET db2.taskperformance.rolein =
(SELECT db2.ttable.rolein
FROM db2.ttable
WHERE db2.taskperformance.activityin = db2.ttable.activityin);
中未在数据库A中出现的唯一值,则会出现此问题。
最后:
activityin
为了完整起见。
答案 1 :(得分:0)
最后我明白了。
似乎我没有开发出有助于进行查询的大脑部分。
这是结果
select distinct( a.rolein ) , a.activityin, b.activityin
from
taskperformance@dm_prod a,
taskperformance b,
activities@dm_prod c,
activities d
where b.rolein = 0
and b.activityin = d.activityin
and d.activityid = c.activityid
and c.activityin = a.activityin
order by b.activityin , a.activityin
谢谢JYelton,你的问题帮助我更好地理解了自己的问题。