我有一个这样的桌子
CREATE TABLE "modules" ( `ID` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `version` TEXT, `deployID` INTEGER )
我希望能够从该数据库中获取所有行,其中不同部署ID之间的版本不同。因此,假设我有一个部署ID 2和一个DeploymentID 3-我的表可能为每个部署有2000个奇数模块。我只想获取名称相同但版本不同的行。这可能吗?我以为这个查询可以做到,但似乎让我得到了一切-两次!
SELECT a.* FROM modules a
INNER JOIN modules b
ON a.name == b.name
WHERE a.version != b.version
AND a.deployID = 3
AND b.deployID = 2
答案 0 :(得分:1)
我可能会在这里使用一个存在的查询:
#include <iostream>
#include <string>
#include <vector>
// Takes values and outputs a string vector.
std::vector<std::string> foo(const int argc, char* args[]) {
std::vector<std::string> strings;
for (int i = 0; i < argc; i++)
strings.push_back(args[i]);
return strings;
}
int main(int argc, char *args[]) {
std::vector<std::string> strings = foo(argc, args);
for (unsigned int i = 0; i < strings.size(); i++)
std::cout << strings[i] << std::endl;
return 0;
}
或者您可能想要一个更具体的版本:
SELECT m1.*
FROM modules m1
WHERE EXISTS (SELECT 1 FROM modules m2
WHERE m1.name = m2.name AND
m1.deployID <> m2.deployID AND m1.version <> m2.version);
答案 1 :(得分:1)
如果您只关心deployid
的{{1}}和2
:
3
如果您不需要此条件:
select m.*
from modules m
where
m.deployid in (2, 3)
and
exists (
select 1 from modules
where
name = m.name
and
deployID <> m.deployID
and
version <> m.version
)
您可以将其删除。