将两个sql查询转换为带有子查询的查询:来自子查询

时间:2017-07-26 08:09:10

标签: sql sqlite

我有以下表结构:

wwwID   eeeID   www1    eee1    property1   property2
1       1       aa2     ddd1    bbb1        adfsdfs
2       1       aa1     ddd1    bbb2        lasdkjfs
3       1       aa3     ddd1    bbb3        doafijsd
4       1       aa1     ddd1    bbb4        doifjdoifs
5       2       bb2     ddd2    ccc1        dofidsjfois
6       2       bb3     ddd2    ccc2        peowrpoerwe
7       2       aa1     ddd2    ccc3        dpofsdopfsd

我的第一个问题是:

SELECT DISTINCT eeeID FROM tInf WHERE www1='aa1'

此查询返回:

eeeID
1
2

然后我将结果传递给第二个查询:

SELECT * FROM tInf WHERE eeeID='" & eeeID & "' LIMIT 1

(mysql语法中的TOP 1)

最终结果:

eeeID, eee1, property1, property2:
1, ddd1, bbb1, adfsdfs
2, ddd2, ccc1, dofidsjfois

我尝试将其合并为一个查询

SELECT * FROM tInf WHERE eeeID IN (
       SELECT DISTINCT eeeID FROM tInf WHERE www='aa1'
) LIMIT 1

但这显然只会带来一个总结果,而不是每个子查询结果一个结果。有没有办法在单个查询中执行此操作?

提前谢谢

2 个答案:

答案 0 :(得分:1)

为什么不选择不同的字段

select distinct eeeID, eee1, property from tInf;

答案 1 :(得分:1)

您希望每个eeeID组都有一个输出行;这是通过GROUP BY完成的。

SQLite允许bare columns in aggregate queries;您可以使用MIN()来获取组中具有最小值的行,或者只是不使用MIN()从组中获取一些随机行:

SELECT *,
       MIN(wwwID)  -- optional
FROM tInf
WHERE eeeID IN (SELECT eeeID
                FROM tInf
                WHERE www1 = 'aa1')
GROUP BY eeeID;