1

タイトルは少し不明瞭に聞こえるかもしれませんが、私の説明がより明確になることを願っています! これが私がやろうとしていることです。ID、値、およびバイナリ属性の 3 つの列を持つテーブルがあります。同じ名前を持つテーブルからアイテムを選択したいが、反対のバイナリ属性を持っているので、例えば

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 を持つ記事レコードが存在するため、すべての名詞レコードとすべての記事レコードが返されます。

両方のレコードのトグルが「はい」であるため形容詞は返されず、両方のレコードのトグルが「いいえ」であるため動詞は返されません。読んでくれてありがとう!

私の説明がまだ明確でない場合は、フォローアップの質問をしてください。問題があれば、JDBC で Derby を使用しています。

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 に答える