我有一个包含多个列的表,我需要从中获取其中两个的唯一值。
桌子看起来像这样
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 而不是我的陈述。我很抱歉没有在我的问题中提供这些信息......