[英]How to select sum of the values with same id from another table in SQL
[英]Access SQL: Select from table if ID is in another
假设我有表T1:
ID | PNo | MM | CP | Flag | Name |
---|-----|------|----|------|------|
1 | 13 | True | 4 | A | X |
1 | 92 | True | 3 | A | X |
2 | 1 | True | 3 | B | Y |
2 | 13 | False| 2 | A | Y |
3 | 13 | True | 3 | B | W |
4 | 1 | True | 3 | B | Z |
和T2:
ID | PNo | MM | CP |
---|-----|------|----|
1 | 13 | True | 4 |
2 | 92 | True | 3 |
3 | 1 | True | 3 |
4 | 13 | False| 2 |
5 | 13 | True | 3 |
1 | 1 | False| 3 |
我想要做的是做一个INSERT INTO,其中我接受T1和T2的值,但前提是T2的ID在T1中并且T1的标志带有值A。
我尝试了两件事:
1)INNER JOIN:类似
INSERT INTO T3 (ID, PNo, MM, CP, Flag, Name)
SELECT T1.ID, T2.PNo, T2.MM, T2.CP, 'A', T1.Name
FROM T2 INNER JOIN T1 ON T1.ID = T2.ID
WHERE (T1.FLAG = 'A')
这里的问题是,它实际上会吸收T1和T2中所有相关行的每种组合。 我想要的是,我只想获取ID也在T1中的那些T2行。
2)在?
INSERT INTO T3 (ID, PNo, MM, CP, Flag, Name)
SELECT T1.ID, T2.PNo, T2.MM, T2.CP, 'A', T1.Name
FROM T2, T1
WHERE T2.ID IN
(SELECT ID FROM T1 WHERE Flag = 'X')
问题出在这里,这需要foreeeeeeeeeeeever!
没有更复杂的方法了吗?
edit://更改了T2中的值,以使该示例更有意义。
所以我想要在新表T3中是:
ID | PNo | MM | CP | Flag | Name |
---|-----|------|----|------|------|
1 | 13 | True | 4 | A | X |
1 | 1 | False| 3 | A | X |
2 | 1 | True | 3 | A | Y |
我得到的是:
ID | PNo | MM | CP | Flag | Name |
---|-----|------|----|------|------|
1 | 13 | True | 4 | A | X |
1 | 1 | False| 3 | A | X |
1 | 13 | True | 4 | A | X |
1 | 1 | False| 3 | A | X |
2 | 1 | True | 3 | A | Y |
因此,基本上,对于我选择的所有T1值(ID,名称)以及可以在T2中通过ID匹配的所有对应行,我都会得到每种组合。
您的第二个解决方案几乎是正确的,但是,您不必要地执行笛卡尔积(我并不惊讶它会永远存在)。 尝试此操作,如果速度较慢,则在Flag
上创建一个索引。
INSERT INTO T3 (ID, PNo, MM, CP, Flag, Name)
SELECT *
FROM T2
WHERE T2.ID IN
(SELECT ID FROM T1 WHERE Flag = 'X')
这应该做您想要的:
INSERT INTO T3 (ID, PNo, MM, CP, Flag, Name)
SELECT T2.ID, T2.PNo, T2.MM, T2.CP, ?, "A"
FROM T2
WHERE T2.ID IN (SELECT ID FROM T1 WHERE Flag = "A");
您在第一个查询中选择T1.ID
您可以采用T1.ID
或T2.ID
,因为您要求它们相等。
您可以使用JOIN
做到这一点:
INSERT INTO T3 (ID, PNo, MM, CP, Flag, Name)
SELECT T2.ID, T2.PNo, T2.MM, T2.CP, T1.Name, "A"
FROM T2 INNER JOIN
T1
ON T2.ID = T1.ID;
如果这会产生重复,则对于给定的name
,您在T1
有多行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.