我想制作视图(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
答案 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)