【问题标题】:MS Access Select Multiple JoinsMS Access 选择多个连接
【发布时间】:2015-11-02 14:32:44
【问题描述】:

我正在尝试通过 c# 和 odbc 从下表中进行选择。

LinkTab (FromDevID, FromPort, ToDevID, ToPort)
DevList (ID,DevName...)

结果应该是这样的

FromDevName  | FromPort | ToDevName | ToDevPort

我已经尝试过以下语句:

SELECT dev1.DevName, lt.FromPort, dev2.DevName, lt.ToPort 
FROM (LinkTab lt
INNER JOIN DevList dev1 ON lt.FromDevID = dev1.ID) 
INNER JOIN devList dev2 ON lt.ToDevID = dev2.ID

我无法获得所有记录。我想我的加入条件有误。

【问题讨论】:

  • 你正在做inner 连接,它只返回在连接的两边都匹配的记录。如果dev1 连接产生的记录数与dev2 不同,则这些记录将被抑制。
  • @MarcB 那我应该使用哪个连接?
  • leftrightfull outer,也许。
  • 您描述中的表名与您的 SQL 不匹配。 -- 如果FromDevIDToDevID 都可以为NULL,则需要两个左连接。

标签: c# sql ms-access join


【解决方案1】:

想必你需要left join:

SELECT dev1.DevName, lt.FromPort, dev2.DevName, lt.ToPort 
FROM (LinkTab lt LEFT JOIN 
      DevList dev1
      ON lt.FromDevID = dev1.ID
     ) LEFT JOIN
     devList dev2
     ON lt.ToDevID = dev2.ID;

您的查询不会返回所有行的原因是设计可能并不总是匹配。如果是这种情况,那么INNER JOIN 将过滤掉设备不匹配的行。 LEFT JOIN 将保留第一个表中的所有行,为第二个和第三个表中的列分配 NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多