Sqlite 如何使左外连接超过内连接?

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

我想创建一个视图(目录视图),它在contacts\u categories\u表和contacts\u表(contacts必须存在)之间进行内部联接,然后将结果与categories表(类别可能未分配)进行左侧外部联接。由于contacts_categories_表有156个记录,我希望catalog_视图也包含176个记录。然而,我在目录视图中得到了3003条记录。我哪里出错了

目录视图

    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表中。