使用 having 的 sqlite 在 java 中的错误结果
wrong result in java with sqlite using having
我有一个 table 具有以下数据
taskid bind_address type_id
1 tcp://10.10.1.2:8001 3
1 tcp://127.0.0.1:8000 2
2 tcp://10.10.1.2:8003 3
2 tcp://127.0.0.1:8002 2
3 tcp://10.10.1.2:8005 3
3 tcp://127.0.0.1:8004 2
4 tcp://10.10.1.3:8007 3
4 tcp://127.0.0.1:8006 2
5 tcp://10.10.1.4:8009 3
5 tcp://127.0.0.1:8008 2
6 tcp://10.10.1.4:8011 3
6 tcp://127.0.0.1:8010 2
7 tcp://10.10.1.5:8011 3
7 tcp://127.0.0.1:8012 2
与此sql声明
select task_id, bind_address,type_id
From task_pub tp
join task t
on tp.task_id=t.id
join host h
on t.host_id=h.id
where h.id=3
group by h.id, task_id
having min(type_id);
每个任务我只想获得最低的行 type_id
如果我用 sqlite3 执行这个语句,我得到这个作为结果
2 tcp://127.0.0.1:8002 2
5 tcp://127.0.0.1:8008 2
6 tcp://127.0.0.1:8010 2
但是使用 java 和 jdbc 驱动程序 sqlite 我得到这个(错误的)结果
2 tcp://10.10.1.2:8003 3
5 tcp://10.10.1.4:8009 3
6 tcp://10.10.1.4:8011 3
java中的sql语句是100%正确的,我在调试模式下复制了语句
having min(type_id)
等同于:
having min(type_id) <> 0
据推测,您想要每个 task_id
的最小值 type_id
。这是一种方法:
select task_id, bind_address, type_id
From task_pub tp join
task t
on tp.task_id = t.id join
host h
on t.host_id = h.id
where h.id = 3 and
not exists (select 1
from task_pub tp2
where tp2.task_id = tp.task_id and
tp2.host_id = tp.host_id and
tp2.type_id < tp.task_id
) ;
我有一个 table 具有以下数据
taskid bind_address type_id
1 tcp://10.10.1.2:8001 3
1 tcp://127.0.0.1:8000 2
2 tcp://10.10.1.2:8003 3
2 tcp://127.0.0.1:8002 2
3 tcp://10.10.1.2:8005 3
3 tcp://127.0.0.1:8004 2
4 tcp://10.10.1.3:8007 3
4 tcp://127.0.0.1:8006 2
5 tcp://10.10.1.4:8009 3
5 tcp://127.0.0.1:8008 2
6 tcp://10.10.1.4:8011 3
6 tcp://127.0.0.1:8010 2
7 tcp://10.10.1.5:8011 3
7 tcp://127.0.0.1:8012 2
与此sql声明
select task_id, bind_address,type_id
From task_pub tp
join task t
on tp.task_id=t.id
join host h
on t.host_id=h.id
where h.id=3
group by h.id, task_id
having min(type_id);
每个任务我只想获得最低的行 type_id 如果我用 sqlite3 执行这个语句,我得到这个作为结果
2 tcp://127.0.0.1:8002 2
5 tcp://127.0.0.1:8008 2
6 tcp://127.0.0.1:8010 2
但是使用 java 和 jdbc 驱动程序 sqlite 我得到这个(错误的)结果
2 tcp://10.10.1.2:8003 3
5 tcp://10.10.1.4:8009 3
6 tcp://10.10.1.4:8011 3
java中的sql语句是100%正确的,我在调试模式下复制了语句
having min(type_id)
等同于:
having min(type_id) <> 0
据推测,您想要每个 task_id
的最小值 type_id
。这是一种方法:
select task_id, bind_address, type_id
From task_pub tp join
task t
on tp.task_id = t.id join
host h
on t.host_id = h.id
where h.id = 3 and
not exists (select 1
from task_pub tp2
where tp2.task_id = tp.task_id and
tp2.host_id = tp.host_id and
tp2.type_id < tp.task_id
) ;