【问题标题】:Copy a Column from a table towards another table with conditions将表中的列复制到具有条件的另一个表
【发布时间】:2023-03-20 22:10:02
【问题描述】:

======= 我是 SQL 新手。我一天以来一直在尝试做的事情(在这里和互联网上经历了数十个主题之后)是一项简单的任务:

我想将“数字”列从表 B 移动到表 A,条件是该数字对应于与表 B 中相同的姓名和姓氏。

表 AAA:

- [NAME], [SURNAME], [NUMBER] 

 - Bob , Dylan  , 
 - Jimi, Hendrix ,

表 BBB:

- [TYPE] [AGE] [TOWN] [NAME] [SURNAME] [NUMBER]
- Guitarist , 95 , Denver , Bob , Dylan  , 45
- Guitar , 45 , Paris , Jimi, Hendrix , 47
- Dancer , 40, New-york , Jimmy, Page , 69
- etc..

UPDATE AAA A 
set A.NUMBER = B.NUMBER 
FROM A INNER JOIN BBB B on A.NAME = B.name and A.SURNAME = B.SURNAME ; 

它不起作用:( 对不起,我是一个令人不安的菜鸟,但我真的不知道该怎么做。

A 语法附近出现错误?

【问题讨论】:

  • 告诉我们您使用的是什么 DMBS
  • 我正在使用 SQLitespy 版本 3.8.0.2

标签: sql sqlite join sql-update


【解决方案1】:

似乎sqlite 不支持UPDATE 上的连接。

您可以通过两种方式解决它:

如果 NAMESURNAMEPRIMARY KEYAAA 你可以这样做:

INSERT OR REPLACE INTO "AAA"(NAME,SURNAME,NUMBER)
SELECT "AAA".NAME,"AAA".SURNAME,"BBB".NUMBER
FROM "AAA"
INNER JOIN "BBB" ON "BBB".NAME = "AAA".NAME 
                AND "BBB".SURNAME = "AAA".SURNAME

这将为AAA 中的每条记录执行INSERT OR REPLACENUMBER 来自BBB

sqlfiddle demo

否则你可以这样做:

UPDATE "AAA"
SET NUMBER = (SELECT NUMBER
                  FROM "BBB"
                  WHERE "BBB".NAME = "AAA".NAME 
                    AND "BBB".SURNAME = "AAA".SURNAME);

sqlfiddle demo

【讨论】:

  • 哦,非常感谢,你太棒了!我可以在第二个选项中使用 INNER JOIN 吗?它做同样的事情吗?
  • @Rsmusic。没有。您不能在第二个查询中进行内部联接,这就是您所拥有的并且不起作用。 :p.
猜你喜欢
  • 1970-01-01
  • 2019-11-29
  • 2013-03-20
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多