选择不同的行/有效的SQL语法?

选择不同的行/有效的SQL语法?,sql,Sql,这是有效的SQL语法:从表中选择不同的列* 也就是说,有人知道几乎所有关系数据库系统都支持这种语法吗 我想选择具有引用另一个表的主键的不同列值/外键的所有行 我想它一定有点复杂,比如: lSBufSelectOldAppointments=新建StringBuilder256; l_sbufselectoldpocations.appendSELECT*FROM; l_sbufSelectoldAppoints.appendl_rule.getOldTableName; l_sbufselec

这是有效的SQL语法:从表中选择不同的列*

也就是说,有人知道几乎所有关系数据库系统都支持这种语法吗

我想选择具有引用另一个表的主键的不同列值/外键的所有行

我想它一定有点复杂,比如:

lSBufSelectOldAppointments=新建StringBuilder256; l_sbufselectoldpocations.appendSELECT*FROM; l_sbufSelectoldAppoints.appendl_rule.getOldTableName; l_sbufselectoldpocations.append WHERE; l_sbufSelectoldAppoints.appendl_rule.getOldRuleMasterFieldName; lsbufSelectOldAppoints.append IN; l_sbufselectoldpointments.appendselectdistinct; l_sbufSelectoldAppoints.appendl_rule.getOldRuleMasterFieldName; l_sbufselectoldpocations.append FROM; l_sbufSelectoldAppoints.appendl_rule.getOldTableName; l_sbufSelectOldAppoints.append.A(如果存在)从LCCALRECU B中选择1,其中B.LID=A。; l_sbufSelectoldAppoints.appendl_rule.getOldRuleMasterFieldName; lsbufSelectOldAppoints.append;

使用Java StringBuilder构建查询。因此,我希望获得具有不同l_rule.getOldRuleMasterFieldName值的所有行。

是尝试此查询

SELECT "DISTINCT COLUMN" FROM TABLE

否-语法在所有RDBMS中无效

快速的SqlFiddle显示SqlServer和Postgres确实支持这一点,但不支持MySql和Oracle

博士后: SqlServer:
SqlFiddle不允许为无效查询添加书签,但您只需切换RDBMS下拉列表并执行,例如Oracle不支持它。你是说:给我所有字段加一列。但是所有都是加上列,所有加上列意味着所有加上列加上列。等等好吧,至少我想这是一个论点。但是,您可以做的是获取特定表的所有列以及可以来自同一表的任何其他列:

select distinct mycol, mytable.* from mytable;
顺便说一句:独特在这里没有意义,但我想你知道。对不起,我刚刚注意到我跳过了你请求的下半部分。所以你不知道。Distinct为您提供不同的结果记录。例如,一旦记录有了一个id,它们的定义就不同了,而distinct是多余的。考虑要比较哪些列的唯一性,以及要显示哪些列。也许您更喜欢查找GROUP BY或EXISTS子句?

在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 ...)
如果你仔细想一想,这个区别在这里什么都不做。无论您是否删除用于填充IN子句的重复记录。成员资格筛选将是相同的。例如,你住在‘法国’、‘法国’、‘法国’当且仅当你住在‘法国’

只需取出清晰的


我必须承认我不明白。您将避免列上有重复项的行?DISTINCT应用于所有列,而不仅仅应用于关键字旁边显示的列。您能用示例表和示例输出行集更好地解释您想要实现的内容吗?所有具有不同列值/外键的行听起来可能只需要一个带有不同关键字的简单内部联接。如果存在重复列值,您想让数据库如何决定选择哪一行?去读一本关于SQL的书。MySQL接受从Sometable中选择不同的SomeColumn,Sometable.*而不出错,尽管不确定输出的意义有多大。的确,与Oracle AFAIK一样,Oracle在与一个或多个显式命名列结合使用时,始终要求表级限定为*。SELECT DISTINCT*试图传达的内容的可读性和表达性会让我感到厌烦。谢谢是的,你是对的,但我认为它仍然不对?我基本上会从OldTableName中选择所有具有外键集的行。
  IN ( SELECT oneOtherField FROM ...)