1

标题可能听起来有点不清楚,希望我的描述会更清楚!这是我想要做的。我有一个包含 3 列、id、值和二进制属性的表。我想从表中选择具有相同名称但二进制属性相反的项目,例如

ID|Value     |Toggle
====================
0 |noun      |no
1 |verb      |no
2 |noun      |yes
3 |adjective |yes
4 |article   |no
5 |noun      |no
6 |adjective |yes
7 |verb      |no
8 |article   |yes

在此表上,返回的记录将是

ID|Value     |Toggle
====================
0 |noun      |no
2 |noun      |yes
4 |article   |no
5 |noun      |no
8 |article   |yes

将返回所有名词记录和所有文章记录,因为存在具有 no 和 yes 的名词记录以及具有 no 和 yes 的文章记录。

形容词不会被返回,因为两个记录都有一个是的切换,动词不会被返回,因为两个记录都有一个没有的切换。谢谢阅读!

如果我的描述仍然不清楚,请问我任何后续问题。如果重要的话,我正在将 Derby 与 JDBC 一起使用。

4

3 回答 3

2

这可能对你有用,我很想知道这会有多快/慢(如果你在 tog 上有一个索引,它会非常快)....我假设表名是 t 并且列值是val 和列切换是 tog :)

SELECT * FROM T 
WHERE  tog = 'yes' and val in (select val from t where tog='no')

UNION 

SELECT * FROM T 
WHERE  tog = 'no'  and val in (select val from t where tog='yes')
于 2013-04-22T20:27:34.573 回答
1

请试试这个:

select * from table a
where exists (
select 1 from table b
where a.Value = b.Value
and a.ID != b.ID
and a.Toggle != b.Toggle
)
于 2013-04-22T19:37:10.103 回答
1
select distinct a.* from my_table a
  join my_table b on a.Value = b.Value and a.Toggle != b.Toggle
于 2013-04-22T19:42:50.630 回答