标题可能听起来有点不清楚,希望我的描述会更清晰! 这是我想要做的。我有一个包含3列,id,value和二进制属性的表。我想从表中选择具有相同名称但反对二进制属性的项目,例如
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
将返回所有名词记录和所有文章记录,因为存在没有和是的名词记录,以及没有和是的文章记录。
不会返回形容词,因为两个记录都有一个切换为yes,并且不会返回动词,因为两个记录都有一个切换为no。谢谢阅读!
如果我的描述仍然不明确,请告诉我任何后续问题。如果重要的话,我正在使用Derby和JDBC。
答案 0 :(得分: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')
答案 1 :(得分: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
)
答案 2 :(得分:1)
select distinct a.* from my_table a
join my_table b on a.Value = b.Value and a.Toggle != b.Toggle