Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL-两列中的不同值_Java_Mysql_Sql_Jdbc - Fatal编程技术网

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上,而不是我的声明。。。我很抱歉没有为我的问题提供这些信息。。。