複数の列を持つテーブルがあり、そのうちの 2 つから一意の値を取得する必要があります。
テーブルはこんな感じ
msgid sender receiver payload
1 service1 service2 xxx
2 service1 service3 xxx
3 service2 service3 xxx
...
必要な出力は次のとおりです: service1、service2、service3 (列の送信者と受信者からの個別の値)
これを行う方法についてさまざまなアプローチを見つけ、次のように UNION を使用することを選択しました。
String query = "(SELECT sender AS service FROM messages) UNION " +
"(SELECT receiver AS service FROM messages) ORDER BY service";
私も試しました
String query = "(SELECT DISTINCT sender AS service FROM messages) UNION " +
"(SELECT DISTINCT receiver AS service FROM messages) ORDER BY service";
UNION はすでに一意の値を返しているため、これは同じものを生成するはずです。ただし、mysql 例外が発生します。
java.sql.SQLException: Column 'sender' not found.
しかし、列送信者は存在します! 私が走るとき
String query = "SELECT DISTINCT sender FROM messages";
すべてがうまく機能します。何が間違っているのか教えてください。この投稿が示唆するように、同様のステートメントを使用しようとしました。ありがとう!
編集:これは私が現在使用している正確なクエリです:
String query = "SELECT sender AS service FROM messages UNION SELECT receiver AS service FROM messages ORDER BY service";
このクエリは、コメントに記載されているとおりに機能するはずです。ただし、まだ例外が発生します。なんでそうなの?トラブルシューティングをありがとう...
私のmysqlバージョンは5.6です。
EDIT2:問題がJDBCにあり、私の声明ではない可能性があるとは思いもしませんでした。質問でこの情報を提供しなかったことをお詫びします...