我有以下表结构:
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
但这显然只会带来一个总结果,而不是每个子查询结果一个结果。有没有办法在单个查询中执行此操作?
提前谢谢
答案 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;