如何在 SQLite 中连接三个表?

Posted

技术标签:

【中文标题】如何在 SQLite 中连接三个表?【英文标题】:How to join three tables in SQLite? 【发布时间】:2016-01-08 12:22:20 【问题描述】:

我有三张表,一张是Info,第二张是workForce,第三张是workDetails

表信息:id(PK),name,status,date,weather

表工作人员:id1(PK), subContractors,noOfPeople,noOfHours

表工作详情:id2(PK),project,workDescription,TableInfo_id(FK) //contains multiple row

表格信息

  ID          NAME        Weather        Date     Status
 ----------  ----------  ----------  ----------  ----------
    1           Paul        Sunny         15/10      MC
    2           Allen       Rainy         15/10      Working

表工作人员

ID1          SubContractors   NoOfPeople      NoOfHours
----------  --------------   ----------       ----------
1           AAA                2                 2
2           BBB                3                 1

表格工作细节

ID2         Project       WorkDescription        TableInfo_id
----------  ----------     --------------          ----------
1              A               B                       1
2                                                      1
3                                                      1
4                                                      1
5               C               D                      2
6                                                      2
7                                                      2
8                                                      2

假设 name 是 Paul,因此将检索 ID 为 1 且 TableInfo_id 为 1 的所有行。

这是我目前尝试过的

public Cursor readEntry(String name) 

        String selectQuery = ("SELECT Weather,Date,Status,SubContractors,NumberOfPeople,NumberOfHours,TimeIn,TimeOut FROM "+TABLE_INFO+TABLE_WORKFORCE+TABLE_WORKDETAILS+ "WHERE Name= ? AND"+ID=ID1+ "AND"+ID=TableInfo_id);
        Cursor c = database.query(TABLE_INFO,TABLE_WORKFORCE,TABLE_WORKDETAILS,new String[]id,name,weather,date,status,iD1,subcontractors,numberOfPerson,numberOfHours,id2project,workDescription,TableInfo_id,MyDatabaseHelper.Name+"=?",
                new String[]  String.valueOf(name), null, null, null, null,null,null,null,null,null,null,null,null);

        if (c != null) 
            c.moveToFirst();
        
        return c;

    

我的代码似乎无法正常工作..我怎样才能做到这一点?谢谢!

【问题讨论】:

任何建议将不胜感激 您的 sqlite 查询似乎有很多问题。应该尝试记录您的查询并检查错误。 我不知道加入这些表..看起来很复杂.. 查看此tutorialspoint.com/sqlite/sqlite_using_joins.htm @CL 什么?请这个问题完全不同......我问的是如何在 SQLite 中加入多个表,而不是 nullPointerException! 【参考方案1】:

你需要做的第一件事是将Table Info的外键添加到Table WorkForce,将Table WorkForce的外键添加到表工作细节

然后像这样编写修改您的查询

Select * from Table Info tf
LEFT JOIN Table WorkForce twf ON twf.tf_id = tf.id
LEFT JOIN Table WorkDetails twd ON twd.tw_id = twf.id

加入三张表后,根据需求修改查询。

查看添加外键的教程。

【讨论】:

那我应该像我做的那样将Table Info的外键添加到Table WorkDetails中吗? 在这之间,WorkForce 表中的 ID 将始终与 Info 表中的 ID 相同...是否还需要将 Table Info 的外键添加到 Table workForce 中? 看,你有三个正确的表,它们之间有某种关系。现在,您想查询以从所有三个表中获取相关或共同的结果吗?你会怎么做?需要有一些通用名称或 ID,您可以使用它们连接表并编写所需的查询以获取结果。【参考方案2】:
    将外键添加到劳动力表,指向信息表中的 ID select * from Info inner join Workforce inner join Workdetails ON Info.ID = Wordforce.SOME_FOREIGN_KEY AND Info.ID = Workdetails.TableInfo_id where NAME = 'Paul'

认为应该可以,但没有尝试过

【讨论】:

以上是关于如何在 SQLite 中连接三个表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sqlite3 中正确连接这些表 [关闭]

在 SQLite 中连接来自不同表的两个字段

如何在可变列数据上设置 SQLite 连接

SQLite,多对多关系,如何聚合?

如何在第三个表中没有公共列的情况下连接三个表?

SQLite 数据库中的连接表