【问题标题】:JOIN Nested DISTINCT加入嵌套的 DISTINCT
【发布时间】:2015-01-08 15:07:13
【问题描述】:

我正在使用 MS Access 编写 SQL 语句,我想知道如何在我的 JOIN 中嵌套 SELECT DISTINCT 语句?

目前我正在编写 2 个查询以获得输出(2 个步骤):

第一个查询是一个简单的 DISTINCT 语句。 第二个查询是对 1 中创建的查询的 JOIN。

如何在连接中嵌套 DISTINCT 语句以便一步执行操作?

SELECT DISTINCT tblFinalIssuerNames_ReverseRepos.ISIN, tblFinalIssuerNames_ReverseRepos.IssuerCode
FROM tblFinalIssuerNames_ReverseRepos;


SELECT QSel_CollateralReposII.ISIN, QSel_CollateralReposII.MarketValueUSD, QSelDistinctISINs.IssuerCode
FROM QSel_CollateralReposII INNER JOIN QSelDistinctISINs ON QSel_CollateralReposII.ISIN = QSelDistinctISINs.ISIN;

我正在考虑类似下面的内容,但语法错误……

SELECT QSel_CollateralReposII.ISIN, QSel_CollateralReposII.MarketValueUSD, tblFinalIssuerNames_ReverseRepos.IssuerCode
FROM QSel_CollateralReposII INNER JOIN tblFinalIssuerNames_ReverseRepos ON SELECT DISTINCT QSel_CollateralReposII.ISIN = tblFinalIssuerNames_ReverseRepos.ISIN;

【问题讨论】:

  • ... JOIN tbl ON col IN (SELECT ..) 这样的东西有用吗?
  • @ryanyuyu 刚刚尝试了您的建议...但以下内容也不起作用:'SELECT QSel_Collat​​eralReposII.ISIN, QSel_Collat​​eralReposII.MarketValueUSD, tblFinalIssuerNames_ReverseRepos.IssuerCode FROM QSel_Collat​​eralReposII INNER JOIN tblFinalIssuerNames_ReverseRepos ON IN (SELECT DISTINCT QSel_Col ISIN FROM QSel_Collat​​eralReposII) = tblFinalIssuerNames_ReverseRepos.ISIN;'

标签: sql ms-access join nested distinct


【解决方案1】:

我无法测试 Access 中允许和不允许的内容,但您可以将查询中的 QSelDistinctISINs 替换为定义它的查询,只需将其放在括号内并为其指定别名 - 下面的 d .这是有效的 SQL 语法:

SELECT 
    r.ISIN, 
    r.MarketValueUSD, 
    d.IssuerCode
FROM 
    QSel_CollateralReposII  r
  INNER JOIN 
    ( SELECT DISTINCT 
          ISIN,
          IssuerCode
      FROM 
          tblFinalIssuerNames_ReverseRepos
    ) d
    ON r.ISIN = d.ISIN ;

【讨论】:

  • 我尝试了使用和不使用别名,我得到“连接操作中的语法错误”。我感觉 Access 无法处理这样的加入。感谢您的建议
  • 你使用的查询和上面的完全一样吗?
  • 脚本的语法将被 MS Access 拒绝。我想:SELECT QSel_CollateralReposII.ISIN,QSel_CollateralReposII.MarketValueUSD,tblFinalIssuerNames_ReverseRepos.IssuerCode FROM QSel_CollateralReposII INNER JOIN(SELECT DISTINCT tblFinalIssuerNames_ReverseRepos.IssuerCode FROM tblFinalIssuerNames_ReverseRepos)ON = QSel_CollateralReposII.ISIN tblFinalIssuerNames_ReverseRepos.ISIN; 跨度>
  • 使用别名我尝试:SELECT QSel_CollateralReposII.ISIN,QSel_CollateralReposII.MarketValueUSD,tblFinalIssuerNames_ReverseRepos.IssuerCode FROM QSel_CollateralReposII INNER JOIN(SELECT DISTINCT tblFinalIssuerNames_ReverseRepos.IssuerCode FROM tblFinalIssuerNames_ReverseRepos)作为MyAlias ON QSel_CollateralReposII.ISIN = MyAlias; 跨度>
  • 应该是SELECT QSel_CollateralReposII.ISIN, QSel_CollateralReposII.MarketValueUSD, MyAlias.IssuerCode FROM QSel_CollateralReposII INNER JOIN (SELECT DISTINCT tblFinalIssuerNames_ReverseRepos.ISIN, tblFinalIssuerNames_ReverseRepos.IssuerCode FROM tblFinalIssuerNames_ReverseRepos) as MyAlias ON QSel_CollateralReposII.ISIN = MyAlias.ISIN;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2018-10-01
相关资源
最近更新 更多