2014-02-18 83 views
-1

我对的SQLite数据库运行下面的查询。我知道至少在contact表中有条目,尽管我没有得到任何结果。没有得到结果的SQLite查询

SELECT * 
    FROM contact, 
     phone, 
     email 
WHERE cnt_cnt_id = phn_cnt_id 
     AND phn_cnt_id = eml_cnt_id 
     AND cnt_cnt_id = 1111 

形成我的查询可以得到我想要加入这三个表的想法。 我应该怎么做才能从所有三个表中检索id为1111的数据?

EDIT(表模式):

private static final String CONTACT_TABLE = "create table " 
    + TABLE_NAME_CONTACT + "(" 
    + COLUMN_ID     + " integer primary key autoincrement, " 
    + COLUMN_CNT_CONTACT_ID   + " text not null, " 
    + COLUMN_CNT_FIRST_NAME   + " text not null," 
    + COLUMN_CNT_LAST_NAME   + " text not null," 
    + COLUMN_CNT_NICK_NAME   + " text not null"  
    + ");"; 

    private static final String PHONE_TABLE = "create table " 
     + TABLE_NAME_PHONE + "(" 
     + COLUMN_ID     + " integer primary key autoincrement, " 
     + COLUMN_PHN_CONTACT_ID   + " text not null, " 
     + COLUMN_PHN_NUMBER   + " text not null" 
     + ");"; 

    private static final String EMAIL_TABLE = "create table " 
     + TABLE_NAME_EMAIL + "(" 
     + COLUMN_ID     + " integer primary key autoincrement, " 
     + COLUMN_EML_CONTACT_ID   + " text not null, " 
     + COLUMN_EML_EMAIL_ID    + " text not null" 
     + ");"; 
+0

添加表的模式。 – astuter

+0

这3个表中存在什么值? – Mathew

+0

@Mathew:用户名称暗示的细节。 – astuter

回答

0

我解决它以这样的方式

SELECT * FROM 
contact LEFT JOIN phone ON cnt_cnt_id = phn_cnt_id        
      LEFT JOIN email ON phn_cnt_id = eml_cnt_id         
      WHERE cnt_cnt_id = 1111 
1

第一件事是,你还没有使用外键这是强制性的加入两个表和检索数据。 Look here>外键如何工作。

您必须添加CONTACT_ID作为

Syntax :FOREIGN KEY(Child tbl id name) REFERENCES TABLE_NAME_CONTACT(Parent tbl id name) 

FOREIGN KEY(COLUMN_PHN_CONTACT_ID) REFERENCES TABLE_NAME_CONTACT(COLUMN_CNT_CONTACT_ID) 
FOREIGN KEY(COLUMN_EML_CONTACT_ID) REFERENCES TABLE_NAME_CONTACT(COLUMN_CNT_CONTACT_ID) 

表模式:

CREATE TABLE "CONTACT" (
    "cnt_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "fname" TEXT NOT NULL, 
    "lname" TEXT NOT NULL, 
    "nickname" TEXT NOT NULL 
) 

CREATE TABLE "PHONE" (
    "ph_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "ph_number" INTEGER NOT NULL, 
    "cnt_id" FOREIGN KEY(cnt_id) REFERENCES TABLE_NAME_CONTACT(cnt_id) 
) 

CREATE TABLE "EMAIL" (
    "email_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "email_address" INTEGER NOT NULL, 
    "cnt_id" INTEGER NOT NULL, FOREIGN KEY(cnt_id) REFERENCES TABLE_NAME_CONTACT(cnt_id) 
) 

调整你的表名&领域和更多的参考检查here

希望这会帮助你。