2016-11-15 67 views
0

我正在一个项目,这需要我在android数据库中做一些查询。但是,我对数据库完全陌生,对于如何处理这种情况我有点困惑。这里有一个粗略的例子来展示我的问题。Android数据库查询跨行检查

对于像这样的表:

表A:

-------------------------------------------------------- 
| _id | name | mimetype | data1 | data2 | data3 | 
-------------------------------------------------------- 
| 1 | user1 |  mime1 | val1 | val2 |  x | 
-------------------------------------------------------- 
| 2 | user1 |  mime2 | val3 | val4 |  y | 
-------------------------------------------------------- 
| 3 | user1 |  mime3 | val8 | val5 |  a | 
-------------------------------------------------------- 
| 4 | user2 |  mime2 | val6 | val7 |  q | 
-------------------------------------------------------- 
| 5 | user2 |  mime3 | val9 | val10 |  a | 
-------------------------------------------------------- 
| 6 | user3 |  mime1 | val11 | val12 |  b | 
-------------------------------------------------------- 

基本上,我想,当符合以下做一个查询,从表的名称,数据1,数据2列返回数据标准:

  1. MIME类型= MIME2
  2. 有在具有相同的名称和它的MIME类型= mime3和数据表中的另一行3 = a

我想知道如何在一个查询中做到这一点。

如果任何人都可以给出一些方法来解决这个问题,那就太棒了!谢谢!

+1

请提供一些示例数据和您所需的输出。 (请参阅[如何 格式堆栈溢出中的SQL表格 后?](http://meta.stackexchange.com/q/96125)如何添加一些。) –

+0

感谢您的信息,我已经做到了一张桌子,虽然不是很好看,Lol – user7153368

回答

0

这可以通过EXISTS operator完成和correlated subquery

SELECT ... 
FROM TableA 
WHERE mimetype = 'mime2' 
    AND EXISTS (SELECT 1 
       FROM TableA AS T2 
       WHERE T2.name = TableA.name 
       AND T2.mimetype = 'mime3' 
       AND T2.data3 = 'a'); 
+0

第4行中的“1”是指什么?当你比较T2.name = TableA.name时,听起来像“1”是指tableA的副本。你能解释一点吗? – user7153368

+0

阅读我链接到的文档。 –

+0

谢谢,尽管我决定在最后使用子查询IN。该示例帮助很大! – user7153368