Sqlite 如何使左外连接超过内连接?
我想创建一个视图(目录视图),它在contacts\u categories\u表和contacts\u表(contacts必须存在)之间进行内部联接,然后将结果与categories表(类别可能未分配)进行左侧外部联接。由于contacts_categories_表有156个记录,我希望catalog_视图也包含176个记录。然而,我在目录视图中得到了3003条记录。我哪里出错了 目录视图Sqlite 如何使左外连接超过内连接?,sqlite,Sqlite,我想创建一个视图(目录视图),它在contacts\u categories\u表和contacts\u表(contacts必须存在)之间进行内部联接,然后将结果与categories表(类别可能未分配)进行左侧外部联接。由于contacts_categories_表有156个记录,我希望catalog_视图也包含176个记录。然而,我在目录视图中得到了3003条记录。我哪里出错了 目录视图 CREATE VIEW IF NOT EXISTS catalog_view AS
CREATE VIEW IF NOT EXISTS catalog_view AS
SELECT
contacts_table._id AS _id,
contacts_table.contact_id,
contacts_table.title_lower,
contacts_table.note_lower,
contacts_table.current_user,
contacts_table.saved,
contacts_table.partner,
contacts_table.title,
contacts_table.email,
contacts_table.title_short,
contacts_table.number,
contacts_table.note,
contacts_table.categories,
categories_table.section_name,
contacts_table.contact_id,
categories_table.parent_id,
categories_table.category_id
FROM
contacts_categories_table INNER JOIN contacts_table
ON(
contacts_categories_table.contact_id = contacts_table.contact_id
AND
contacts_categories_table.current_user = contacts_table.current_user)
LEFT OUTER JOIN categories_table ON(
contacts_categories_table.category_id = categories_table.category_id
AND contacts_categories_table.current_user = categories_table.current_user)
联系人\u表
-可唤醒联系人列表。共有76项
CREATE TABLE IF NOT EXISTS contacts_table(
_id integer primary key,
title text default '',
title_lower text default '',
title_short text default '',
photo blob, number text default '',
note text default '',
note_lower text default '',
email text, partner int default '0',
contact_id int default '0',
current_user text default '',
categories text default '',
saved integer default '0' );
类别\u表
-可用类别列表。有1758件物品
CREATE TABLE IF NOT EXISTS categories_table(
_id integer primary key,
category_id integer,
parent_id integer,
name text,
section_name text,
current_user text,
sub_name text);
联系人\类别\表
-记录了分配给每个联系人的类别(如果有)。共有156项
CREATE TABLE IF NOT EXISTS contacts_categories_table(
_id integer primary key,
contact_id integer,
category_id integer,
current_user text );
您应该将左联接而不是内部联接放在contact\u categories\u表中。 这样您就可以从contact_category表中获取所有记录。 希望你能得到你想要的结果
CREATE VIEW IF NOT EXISTS catalog_view AS
SELECT
contacts_table._id AS _id,
contacts_table.contact_id,
contacts_table.title_lower,
contacts_table.note_lower,
contacts_table.current_user,
contacts_table.saved,
contacts_table.partner,
contacts_table.title,
contacts_table.email,
contacts_table.title_short,
contacts_table.number,
contacts_table.note,
contacts_table.categories,
categories_table.section_name,
contacts_table.contact_id,
categories_table.parent_id,
categories_table.category_id
FROM
contacts_categories_table
LEFT JOIN contacts_table
ON (contacts_categories_table.contact_id = contacts_table.contact_id AND contacts_categories_table.current_user = contacts_table.current_user)
LEFT JOIN categories_table
ON(contacts_categories_table.category_id = categories_table.category_id AND contacts_categories_table.current_user = categories_table.current_user)
请为上述内容提供解释,并为每个相关表提供适当的CREATE TABLE语句。@我为其他表添加了shemas谢谢进度报告,但您的clase将只返回具有指定类别的联系人,而我希望所有联系人都出现在contacts\u categories\u表中。