Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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/7/sql-server/22.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
使用外键引用更新SQLite值_Sqlite_Sql Update_Foreign Keys_Left Join - Fatal编程技术网

使用外键引用更新SQLite值

使用外键引用更新SQLite值,sqlite,sql-update,foreign-keys,left-join,Sqlite,Sql Update,Foreign Keys,Left Join,给定三个表,其中一个表用作包含两个外键列的联接表,我尝试进行插入,以便在给定TableA.prefix、TableA.number、TableB.prefix和TableB.number的情况下,我可以为JunctionTable中的匹配行更新JunctionTable.is\u存档列: 因此,尽管JunctionTable中的匹配行当前看起来像: +----------------------------------------------------------------------+ |

给定三个表,其中一个表用作包含两个外键列的联接表,我尝试进行插入,以便在给定
TableA.prefix
TableA.number
TableB.prefix
TableB.number
的情况下,我可以为
JunctionTable
中的匹配行更新
JunctionTable.is\u存档
列:

因此,尽管JunctionTable中的匹配行当前看起来像:

+----------------------------------------------------------------------+
|     id     |     tblA_id     |     tblB_id     |     is_archived     |
|     3      |        7        |       98        |          0          |
+----------------------------------------------------------------------+
表A和表B中匹配的行如下所示:

+----------------------------------------------+
|     id     |     prefix     |     number     |
|     7      |      CLA       |       754      |
+----------------------------------------------+
表B

+----------------------------------------------+
|     id     |     prefix     |     number     |
|     98     |      RED       |       221      |
+----------------------------------------------+
我想像这样更新
is\u archived
值:

+----------------------------------------------------------------------+
|     id     |     tblA_id     |     tblB_id     |     is_archived     |
|     3      |        7        |       98        |          1          |
+----------------------------------------------------------------------+
我根据找到的信息尝试了几种不同的陈述,但它们无效:

UPDATE JunctionTable 
    SET is_archived = "1" 
        WHERE tblAid = 
            (SELECT id FROM TableA WHERE prefix = "CLA" AND number = 754) 
        AND tblB.id = 
            (SELECT id FROM TableB WHERE prefix = "RED" AND number = 221)



UPDATE JunctionTable 
    SET is_archived = "1" 
        WHERE (
            LEFT JOIN TableA ON JunctionTable.tblA_id=TableA.id 
                WHERE TableA.course_prefix = "CLA" AND TableA.course_number = 754 
            LEFT JOIN TableB ON JunctionTable.tblB_id=TableB.id 
                WHERE TableB.course_prefix = "RED" AND TableB.course_number = 221)

在第一个查询中,问题似乎是连接表中ID列的名称(“tblay”和“tblB.ID”),并且使用双引号而不是单引号。这应该起作用:

UPDATE JunctionTable 
SET is_archived = 1 
    WHERE tblA_id = 
        (SELECT id FROM TableA WHERE prefix = 'CLA' AND number = 754) 
    AND tblB_id = 
        (SELECT id FROM TableB WHERE prefix = 'RED' AND number = 221)

我在PHP中使用UPDATE语句,所以我保留了双引号,它工作起来很有魅力-谢谢!