我正在尝试通过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
而且我无法获得所有记录。我猜我的加入条件有误。
大概,您需要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
则将过滤出设备不匹配的行。ALEFT JOIN
将把所有行保留在第一个表中,并分配NULL
第二个和第三个表中的列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句