Java MySQL-两列中的不同值
我有一个包含多个列的表,我需要从其中的两个列中获取唯一的值 这张桌子看起来像这样Java MySQL-两列中的不同值,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我有一个包含多个列的表,我需要从其中的两个列中获取唯一的值 这张桌子看起来像这样 msgid sender receiver payload 1 service1 service2 xxx 2 service1 service3 xxx 3 service2 service3 xxx ... 所需的输出应为:service1、service2、service3(不同于发送方和接收方列的值) 我找到了许多不同的方法来实现这一点,
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上,而不是我的声明。很抱歉没有在我的问题中提供这些信息…应该这么简单,因为UNION已经删除了重复项
SELECT sender AS service FROM messages
UNION
SELECT receiver AS service FROM messages
ORDER BY service;
他们同意这一点,也同意我的观点
相反,在第一个SELECT语句中提供列别名,并在ORDER BY中引用别名
在SQLFiddle上,我的查询有效,OPs有效吗?黑暗中的猜测是,当您检索数据时,您使用的是“发件人”而不是“服务”,这可以解释为什么前两个查询有效,而后一个则无效 如果是这样,请告诉我 假设您使用的是
JDBC
:
String query = "SELECT sender AS service FROM messages UNION SELECT receiver AS service FROM messages ORDER BY service";
ResultSet rs = ps.executeQuery(query);
while (rs.next()) {
String value = rs.getString("sender"); // instead it should be "service"
// Some other actions
}
只需从您的代码中删除
“+”
符号和“Distinct”
,然后尝试..是union
是为了获得Distinct值,那么为什么要使用Distinct
。引发sql异常的确切查询是什么?正如我在问题中指出的,我尝试了这两个语句,它们都产生了相同的例外…这很奇怪,查询在语法上是正确的。@Smajl好的,在黑暗中的猜测是当您检索数据时,您使用的是“发件人”而不是“服务”,这可以解释为什么前两个查询有效,而最后一个则无效。如果是这种情况,请告诉我。我认为问题的关键在于,无论出于何种原因,该查询对Smajl都不起作用String query=“从消息联盟中选择发送者作为服务”+“从消息中选择接收者作为服务按服务顺序”;-我已经试过这个了,看我的问题。@Smajl:问题中有括号。现在,请发布准确的查询please@Smajl:检查我的SQLFiddle链接。您的查询也可以@gbn我相信您,发布的查询是可以的。然而,这并不能解决我的问题。所以基本上我的问题是“为什么它对我不起作用?”你说他的意思是什么?“发件人”和“收件人”是我表格中的名称。“服务”只是我在union语句中使用的一个别名…我的意思是,在代码方面,当您检索数据时,请参阅我的更新答案谢谢!我不知道问题出在JDBC上,而不是我的声明。。。我很抱歉没有为我的问题提供这些信息。。。