如何在内连接上进行左外连接?

时间:2016-01-22 16:52:10

标签: sqlite

我想制作视图(catalog_view),它使contacts_categories_table和contacts_table(联系人必须存在)之间的内部联接,然后左外连接结果与类别表(可能不分配类别)。由于contacts_categories_table有156个记录,我希望catalog_view也包含176个记录。但是,我在catalog_view中获得了3003条记录。我在哪里犯了错误?

catalog_view

[0.80000001, 0.40000001]
[0.72000003, 0.56]
[0.68800002, 0.62400001]
[0.67520005, 0.64960003]
[0.67008007, 0.65984005]

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) - 可靠联系人列表。有76件。

contacts_table

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' ); - 可用类别列表。有1758项。

categories_table

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件。

contacts_categories_table

1 个答案:

答案 0 :(得分:0)

您应该在contact_categories_table中添加 LEFT JOIN 而不是 INNER JOIN 。 这样您就可以从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)