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/8/selenium/4.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_Select_Join - Fatal编程技术网

无法在sqlite中联接两个表

无法在sqlite中联接两个表,sqlite,select,join,Sqlite,Select,Join,我有两张桌子: CREATE TABLE "object_comment" ("object_id" INTEGER PRIMARY KEY NOT NULL, "object_comment_text" TEXT, "object_comment_title" TEXT, "object_comment_date" DATETIME) 及 我需要将它们与object_id字段连接起来,但是唯一的行也应该出现在结果中。有一些相等的object_id值需要在一行中联接,而有些objec

我有两张桌子:

CREATE TABLE "object_comment" 
("object_id" INTEGER PRIMARY KEY  NOT NULL, 
"object_comment_text" TEXT, 
"object_comment_title" TEXT, 
"object_comment_date" DATETIME)

我需要将它们与object_id字段连接起来,但是唯一的行也应该出现在结果中。有一些相等的object_id值需要在一行中联接,而有些object_id值不同,但它们应该在结果表中

现在我有了这个选择查询:

SELECT *
FROM object_comment
LEFT OUTER JOIN object_comment_mark ON object_comment.object_id = object_comment_mark.object_id
但在本例中,我没有第二个表中的行,其中object_id具有唯一值。有什么帮助吗

编辑:我需要什么

反对意见

1 | bla-bla | first | 2013
2 | be-be   | sec   | 2014
对象\注释\标记

1 | 5 | 2013
4 | 3 | 2013
结果

1 |bla-bla | first| 2013 | 5 | 2013
2 | be-be  | sec  | 2014 |   |     
4 |        |      |      | 3 | 2013

我不太明白你的问题

这是你需要的吗

SELECT * FROM object_comment
INNER JOIN object_comment_mark ON object_comment.object_id = object_comment_mark.object_id
UNION ALL
SELECT *, NULL, NULL, NULL, NULL FROM object_comment

我不太明白你的问题

这是你需要的吗

SELECT * FROM object_comment
INNER JOIN object_comment_mark ON object_comment.object_id = object_comment_mark.object_id
UNION ALL
SELECT *, NULL, NULL, NULL, NULL FROM object_comment

您需要的是完全外部联接,这是SQLite不支持的。 相反,您可以将左连接与右连接的不匹配的空记录组合在一起。 也不支持右连接,因此在交换两个表时使用左连接:

SELECT oc.*, ocm.*
FROM object_comment AS oc
LEFT JOIN object_comment_mark AS ocm ON oc.object_id = ocm.object_id
UNION ALL
SELECT oc.*, ocm.*
FROM object_comment_mark AS ocm
LEFT JOIN object_comment AS oc       ON oc.object_id = ocm.object_id
WHERE oc.object_id IS NULL
或者,手动搜索不匹配的记录:

SELECT oc.*, ocm.*
FROM object_comment AS oc
LEFT JOIN object_comment_mark AS ocm ON oc.object_id = ocm.object_id
UNION ALL
SELECT NULL, NULL, NULL, NULL, *
FROM object_comment_mark
WHERE object_id NOT IN (SELECT object_id
                        FROM object_comment) 

您需要的是完全外部联接,这是SQLite不支持的。 相反,您可以将左连接与右连接的不匹配的空记录组合在一起。 也不支持右连接,因此在交换两个表时使用左连接:

SELECT oc.*, ocm.*
FROM object_comment AS oc
LEFT JOIN object_comment_mark AS ocm ON oc.object_id = ocm.object_id
UNION ALL
SELECT oc.*, ocm.*
FROM object_comment_mark AS ocm
LEFT JOIN object_comment AS oc       ON oc.object_id = ocm.object_id
WHERE oc.object_id IS NULL
或者,手动搜索不匹配的记录:

SELECT oc.*, ocm.*
FROM object_comment AS oc
LEFT JOIN object_comment_mark AS ocm ON oc.object_id = ocm.object_id
UNION ALL
SELECT NULL, NULL, NULL, NULL, *
FROM object_comment_mark
WHERE object_id NOT IN (SELECT object_id
                        FROM object_comment) 

第二个表的object_id是外键吗?因为你提到它不是独一无二的。在一对多关系中,多方总是有外键。这两个表中的对象id键是唯一的。但它们可能不同。我需要显示这两个表中的所有行,但是使用相同的object\u id连接行。那么,当两个表都具有唯一的object\u id时,如何连接这两个表呢?在对象注释中创建记录时,对象注释标记中的记录是否已创建?如果是这样的话,是不是意味着你只需要为每一条记录创建一条记录,还是为每一条记录创建一条或多条记录?参见我问题中的编辑。这就像一个带有外部联接的数据透视表。我认为你必须重新审视你原来的数据库设计,而不是这一个。如果这两个表之间的基数是一对一的,那么最好将其设为一个表。由于设计不佳,与您现在想要执行的非常复杂的查询相比,您的查询将非常简单。第二个表的object_id是外键吗?因为你提到它不是独一无二的。在一对多关系中,多方总是有外键。这两个表中的对象id键是唯一的。但它们可能不同。我需要显示这两个表中的所有行,但是使用相同的object\u id连接行。那么,当两个表都具有唯一的object\u id时,如何连接这两个表呢?在对象注释中创建记录时,对象注释标记中的记录是否已创建?如果是这样的话,是不是意味着你只需要为每一条记录创建一条记录,还是为每一条记录创建一条或多条记录?参见我问题中的编辑。这就像一个带有外部联接的数据透视表。我认为你必须重新审视你原来的数据库设计,而不是这一个。如果这两个表之间的基数是一对一的,那么最好将其设为一个表。你的查询会非常简单,相比之下,你现在要做的非常复杂,因为设计很差。对不起,英语不是我的母语。首先,在您的情况下,在第二个select中有1个额外的NULL。但结果总的来说是错误的。更简单地说,我首先需要计算两个表中不同的object_id字段的数量。然后我需要一个表对象| id |两个表中的所有列。对象id在此表中是唯一的。抱歉,EN不是我的母语。首先,在您的情况下,在第二个select中有1个额外的NULL。但结果总的来说是错误的。更简单地说,我首先需要计算两个表中不同的object_id字段的数量。然后我需要一个表对象| id |两个表中的所有列。对象id在此表中是唯一的。