这是一种有效的SQL语法:SELECT DISTINCT COLUMN,* FROM TABLE。
也就是说,是否有人知道几乎所有关系数据库系统是否都支持这种语法?
我想选择所有具有不同列值/外键的行,这些行引用另一个表的主键。
我想它一定要复杂一些,比如:
l_sbufSelectOldAppointments = new StringBuilder(256);
l_sbufSelectOldAppointments.append("SELECT * FROM ");
l_sbufSelectOldAppointments.append(l_rule.getOldTableName());
l_sbufSelectOldAppointments.append(" WHERE ");
l_sbufSelectOldAppointments.append(l_rule.getOldRuleMasterFieldName());
l_sbufSelectOldAppointments.append(" IN ");
l_sbufSelectOldAppointments.append("(SELECT DISTINCT ");
l_sbufSelectOldAppointments.append(l_rule.getOldRuleMasterFieldName());
l_sbufSelectOldAppointments.append(" FROM ");
l_sbufSelectOldAppointments.append(l_rule.getOldTableName());
l_sbufSelectOldAppointments.append(".A WHERE EXISTS (SELECT 1 FROM LCCALRECU B WHERE B.LID = A.");
l_sbufSelectOldAppointments.append(l_rule.getOldRuleMasterFieldName());
l_sbufSelectOldAppointments.append("))");
使用Java StringBuilder构建查询。因此,我希望获得具有不同l_rule.getOldRuleMasterFieldName()值的所有行。
答案 0 :(得分:1)
您的SQL查询中不需要DISTINCT
关键字。在您提供的查询中,无论您是否放置了DISTINCT
关键字,都应始终获得相同的结果。
这是您的SQL查询,我从您的代码中了解到:
SELECT * FROM OldTableName
WHERE OldRuleMasterFieldName
IN
( SELECT DISTINCT OldRuleMasterFieldName
FROM OldTableName A
WHERE EXISTS (SELECT 1 FROM LCCALRECU B WHERE B.LID = A.OldRuleMasterFieldName)
)
更通用,它适合这个模板:
SELECT ...
FROM sometable
WHERE justOneField
IN ( SELECT DISTINCT oneOtherField FROM ...)
如果你仔细想想,DISTINCT
在这里什么都不做。如果重复删除用于填充IN()
子句的记录,则无关紧要。成员资格过滤将是相同的。例如,当且仅当您居住IN ('France','France','France')
时才会生活IN ('France')
。
只需取出DISTINCT
。
IN ( SELECT oneOtherField FROM ...)
答案 1 :(得分:0)
是尝试此查询
SELECT "DISTINCT COLUMN" FROM TABLE
答案 2 :(得分:0)
否 - 语法在所有RDBMS
中无效快速SqlFiddle
表明SqlServer
和Postgres
支持此功能,但不支持MySql
或Oracle
(SqlFiddle不允许对无效查询添加书签,但您只需切换RDBMS下拉并执行)
答案 3 :(得分:0)
例如,Oracle不支持它。你是说:给我所有的字段加上一列。但是那么“all”将全部加上列,而“all plus the column”因此意味着所有加上列加上列。等等。好吧,至少我猜这将是争论。但是,你可以做的是获取特定表的所有列以及任何其他列(可以来自同一个表):
select distinct mycol, mytable.* from mytable;
BTW:Distinct在这里毫无意义,但我猜你知道。编辑:对不起,我刚注意到我跳过了你请求的下半部分。所以你不知道。 Distinct为您提供不同的结果记录。一旦记录具有id,例如它们根据定义是不同的,并且distinct是多余的。考虑要比较哪些列的唯一性以及要显示的列。也许您正在寻找GROUP BY或EXISTS条款?