Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL新手,需要查询帮助吗_Sql_Database - Fatal编程技术网

SQL新手,需要查询帮助吗

SQL新手,需要查询帮助吗,sql,database,Sql,Database,我有一个自己的数据库表,我正试图为它构造一个看起来足够简单的查询,但我觉得我在某个地方搞砸了,因为结果不是它们应该的结果 我基本上有一张表,如下所示: 表:数据 栏目: Row ID Profile Import ID Field ID Product 1 5 Null 5 60 Can 2 0

我有一个自己的数据库表,我正试图为它构造一个看起来足够简单的查询,但我觉得我在某个地方搞砸了,因为结果不是它们应该的结果

我基本上有一张表,如下所示:

表:数据

栏目:

Row      ID           Profile     Import ID     Field ID        Product
1         5            Null           5           60              Can
2         0            Null           5           65              Hat
3         0            Null           5           70              Box
4         6            Null           6           60              Fish
我基本上想把第2行中的单词Hat放在第1行的Profile列中,替换那里的null值。我对多行执行此操作

在多行的情况下,我希望使用Profile列并使其与Product列相等。我只希望在ID值与导入ID匹配的行中,以及字段ID为65的行中发生这种情况。在上面的示例中,ID 5与导入ID 5匹配,因此我希望在字段ID为65的情况下获取产品值,并将该值放入ID为5的Profile列中。我的表有9000多行,600行必须以这种方式更改,需要插入各种ID和各种产品

我希望的结果是:

Row      ID           Profile     Import ID     Field ID        Product
1         5            Hat           5           60              Can
2         0            Null          5           65              Hat
3         0            Null          5           70              Box
4         6            Null          6           60              Fish
我祈祷这是有道理的

我的问题是

更新“数据” 设置“配置文件”=“产品” 其中'ID'='Import ID'和'Field ID'=65

我还尝试了一个子查询

更新“数据” 设置“配置文件”=从“字段ID”=65的数据中选择“产品” 其中'ID'='Import ID'


这不起作用,我只是想知道是否有一些逻辑我错过了。感谢所有能够提供帮助的人,我已经尝试了一段时间来理解这一点…

您需要加入数据;比如:

UPDATE d1
SET d1.Profile = d2.Product
FROM [Data] d1 -- dest
INNER JOIN [DATA] d2 -- source
    ON d2.[Import ID] = d1.[ID] AND d2.[Field ID] = 65

注意交换了2列…

您需要加入数据;比如:

UPDATE d1
SET d1.Profile = d2.Product
FROM [Data] d1 -- dest
INNER JOIN [DATA] d2 -- source
    ON d2.[Import ID] = d1.[ID] AND d2.[Field ID] = 65

注意:交换了两列…

学习sql时需要记住的几件事:

在列名中使用空格不是一个好主意。虽然它们可能更容易阅读,但这会使您的查询更加困难。大多数数据库根本不允许使用它们,而那些使用不同方法指定查询中的列的数据库

为了解决您的问题,也许您应该尝试将列名括在反勾号“”或方括号[]中

无论如何,不要考虑一个空格,请考虑下划线。 记住这一点,您还应该记住不要将列名加引号。差不多

从“字段ID”=65的数据中选择“产品”

由于两个原因不起作用:

a。选择引用文本将返回该引用文本。如果where子句返回两行,则返回两次文本“Product”

b。在这里,where子句将文本“Field ID”与数字65进行比较,数字65始终为false


希望这有助于学习sql时记住以下几点:

在列名中使用空格不是一个好主意。虽然它们可能更容易阅读,但这会使您的查询更加困难。大多数数据库根本不允许使用它们,而那些使用不同方法指定查询中的列的数据库

为了解决您的问题,也许您应该尝试将列名括在反勾号“”或方括号[]中

无论如何,不要考虑一个空格,请考虑下划线。 记住这一点,您还应该记住不要将列名加引号。差不多

从“字段ID”=65的数据中选择“产品”

由于两个原因不起作用:

a。选择引用文本将返回该引用文本。如果where子句返回两行,则返回两次文本“Product”

b。在这里,where子句将文本“Field ID”与数字65进行比较,数字65始终为false


希望这有帮助

看起来这应该是两个单独的表。导入[导入ID]、[字段ID]、产品和数据行、ID、配置文件。看起来这应该是两个单独的表。导入[导入ID]、[字段ID]、产品和数据行、ID、配置文件。