使用sqlite中的公共列对三个表进行排序

时间:2013-10-17 15:50:49

标签: android sqlite

我正在做一个安卓项目..而且这个平台并不那么熟悉......

我必须使用公共列对我的数据库中的3个表进行排序。下面给出了表格详细信息...

表位置      (字符串日期,       字符串日,       字符串时间,       String location_address,       字符串纬度,       字符串经度,       很长一段时间InMilli)

表格      (字符串名称,      字符串编号,      字符串类型,      字符串日期,      字符串时间,      字串持续时间      很长一段时间InMilli)

表短信      (字符串日期,      字符串时间,      字符串类型,      字符串添加,      字符串联系,      String sub,      字符串消息,      很长一段时间InMilli)

我必须根据timeInMilli列对这些表进行排序......

任何人PLZ帮助我,,,我需要代码,因为我的项目submsn日期是10月23日... PLZ帮助我...提前感谢...

2 个答案:

答案 0 :(得分:2)

要仅连接多个查询的结果,请使用UNION ALL;结果的列名取自第一个子查询:

SELECT rowid AS ID, 'call' AS c_or_s_or_l, date, timeInMilli FROM call
UNION ALL
SELECT rowid,       'SMS',                 date, timeInMilli FROM SMS
UNION ALL
SELECT rowid,       'location',            date, timeInMilli FROM Location
ORDER BY timeInMilli

答案 1 :(得分:0)

我不一定了解SQLite中的语法差异,但我可以在Oracle中向您展示一个示例,但概念将保持不变。

所以我设置了一个数据子集。表MLOCATION,MCALL和SMS。 MLOCATION包含日期,日期和时间。 MCALL包含名称,编号,日期和时间。 SMS包含日期,类型,消息和timeinmilli。所以当你注意到我必须在所有专栏中都有'timeinmlili'。

我所做的是根据timeinmilli的值合并列。您可以使用列标题指定所需的任何和所有值,然后选择具有timeinmilli的表并说出“完全连接”,其中该值等于另一个表中的值。

select coalesce(l.MILLI, c.MILLI, s.MILLI) TIMEINMILLI,
  l.DDAY D_DAY,
  c.DNAME D_NAME,
  c.NUM D_NUMBER,
  s.DTYPE D_TYPE,
  s.MSG MESSAGE
from MLOCATION l full join MCALL c
  on l.MILLI = c.MILLI full join SMS s
  on c.MILLI = s.MILLI;

根据我创建的表给出了输出:

TIMEINMILLI    D_DAY      D_NAME    D_NUMBER    D_TYPE  MESSAGE
1381730400000  Monday     Thatguy   4786217452  Type1   This is a message
1381903200000  Wednesday  Someone   4897414821  Type3   Word
1381989600000  Thursday   Nafi      1234567891  Type2   LOL

您可能还会看到我在SQLFiddle中提供的完整示例。请记住我在Oracle中这样做了,但您可以将数据库类型更改为SQLite以测试您自己的表和模式。

还要竖起那个最初指向我这个方向的人 - peterm