Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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_Sqlite - Fatal编程技术网

SQL:使用另一个表更新行数

SQL:使用另一个表更新行数,sql,sqlite,Sql,Sqlite,有人能帮我回答这个“简单”的问题吗 我有两张桌子:曲调和储蓄存款 Tunes包含一组tune信息,包括一个Rating INTEGER字段和一个MD5字段,用于唯一标识一个tune SavedRatings是一个由评级和MD5字段组成的表,因此,当我删除曲目内容并在以后添加回曲目时,我可以识别该曲目的评级 所以。。我要做的是通过匹配SavedRatings表中的Tunes MD5字段来更新Tunes表中的Rating字段 我想出了下面的命令,这是完全错误的。你能推荐一个替代方案吗?我正在使用SQ

有人能帮我回答这个“简单”的问题吗

我有两张桌子:曲调和储蓄存款

Tunes包含一组tune信息,包括一个Rating INTEGER字段和一个MD5字段,用于唯一标识一个tune

SavedRatings是一个由评级和MD5字段组成的表,因此,当我删除曲目内容并在以后添加回曲目时,我可以识别该曲目的评级

所以。。我要做的是通过匹配SavedRatings表中的Tunes MD5字段来更新Tunes表中的Rating字段

我想出了下面的命令,这是完全错误的。你能推荐一个替代方案吗?我正在使用SQLite

UPDATE Tunes
SET Tunes.Rating=SavedRatings.Rating
WHERE Tunes.MD5 IN (SELECT MD5 FROM SavedRatings);

你可以这样做

UPDATE Tunes
SET Tunes.Rating = SavedRatings.Rating
FROM SavedRatings 
WHERE Tunes.MD5 = SavedRatings.MD5;

你可以这样做

UPDATE Tunes
SET Tunes.Rating = SavedRatings.Rating
FROM SavedRatings 
WHERE Tunes.MD5 = SavedRatings.MD5;

这很有效。。我怀疑这不是最佳方案,但在我找到更好的解决方案之前,目前必须这样做:

UPDATE Tunes
SET Rating = ( SELECT Rating FROM SavedRatings WHERE MD5=Tunes.MD5 LIMIT 1 )
WHERE EXISTS ( SELECT Rating FROM SavedRatings WHERE MD5=Tunes.MD5 LIMIT 1 );

这很有效。。我怀疑这不是最佳方案,但在我找到更好的解决方案之前,目前必须这样做:

UPDATE Tunes
SET Rating = ( SELECT Rating FROM SavedRatings WHERE MD5=Tunes.MD5 LIMIT 1 )
WHERE EXISTS ( SELECT Rating FROM SavedRatings WHERE MD5=Tunes.MD5 LIMIT 1 );
试试看

更新Tunes set Rating=从SavedRating中选择SavedRating.Rating,其中Tunes.md5=SavedRating.md5

希望这有帮助

试试看

更新Tunes set Rating=从SavedRating中选择SavedRating.Rating,其中Tunes.md5=SavedRating.md5



希望这有帮助

如果你想保持同步,我想知道将这些信息分成两个表有什么用:-@Smutje:因为我想定期清除Tunes表。当我加载以前已分级的乐曲时,我希望为这些乐曲分配一个分级。SavedRatings表内容将是“永远”。。Tunes表内容将不同步。我想知道如果您想保持同步,将此信息拆分为两个表有什么用:-@Smutje:因为我想定期清除Tunes表。当我加载以前已分级的乐曲时,我希望为这些乐曲分配一个分级。SavedRatings表内容将是“永远”。。Tunes表内容将不可用。谢谢。我会试试看,如果你的回答行得通的话,我会接受的。。我相信它会的:-我用SQLite manager Firefox插件尝试了这个,它给了我一个语法错误,这不是很有用。我相信这在MySQL上是可以的。不,这是sql server语法MySQL语法有点不同。是的,我只是在MySQL上尝试了一下,但没有效果。为什么SQL语法不能是标准的呢?谢谢你。我会试试看,如果你的回答行得通的话,我会接受的。。我相信它会的:-我用SQLite manager Firefox插件尝试了这个,它给了我一个语法错误,这不是很有用。我相信这在MySQL上是可以的。不,这是sql server语法MySQL语法有点不同。是的,我只是在MySQL上尝试了一下,但没有效果。为什么SQL语法不能是标准的呢?谢谢,我用SQLite管理器和Firefox插件试过了,它给了我一个语法错误,这不是很有用。其他建议也有同样的问题。出于某种原因,我不认为SQLite喜欢虚线符号??谢谢,我用SQLite管理器和Firefox插件尝试了这一点,它给了我一个语法错误,这不是很有用。其他建议也有同样的问题。我不认为SQLite出于某种原因喜欢虚线符号???@user1101733:这就可以了,谢谢。老实说,我不确定WHERE EXISTS条款能起到什么作用。。如果SELECT语句没有返回任何行,它不会停止分配null吗?不,即使SELECT语句返回nows,它也会工作。仅当Tunes.md5=SavedRating.md5为true时,它才会更新,否则会更新nothing@user1101733:这就行了,谢谢。老实说,我不确定WHERE EXISTS条款能起到什么作用。。如果SELECT语句没有返回任何行,它不会停止分配null吗?不,即使SELECT语句返回nows,它也会工作。它将仅在Tunes.md5=SavedRating.md5为true时更新,否则不执行任何操作