我如何执行doble LEFT JOIN?

时间:2019-06-17 09:52:24

标签: sql oledb

我今天需要你的帮助:)

我正在尝试使用c#执行SQL指令:

 "SELECT table_organe.id,table_famille.famille,table_organe.Libelle,table_organe.Description,table_organe.Symbole, rle_orgposition.position " + "FROM (table_organe " +
    "LEFT JOIN table_famille ON table_organe.Famille= table_famille.ID) " +   "LEFT JOIN rle_orgposition ON table_organe.id = rle_orgposition.idOrgane";

似乎不起作用,我尝试使用方括号等。 唯一有效的指令是:

SELECT * " +
"FROM (table_organe " +
"LEFT JOIN table_famille ON table_organe.Famille= table_famille.ID) " +   
"LEFT JOIN rle_orgposition ON table_organe.id = rle_orgposition.idOrgane";

问题与我要检索的值有关。 谢谢你的帮助 !

(对不起,如果我的英语不太好,我不是母语人士)!

大编辑:我不知道为什么,但是在我的指令中,我只是将括号放在SELECT ... rle_orgposition。[position]上,它起作用了。...为什么? 问题解决了,但对我来说仍然很奇怪。

2 个答案:

答案 0 :(得分:1)

语法错误FROM (... ) LEFT

 SELECT table_organe.id
  , table_famille.famille
  , table_organe.Libelle
  , table_organe.Description
  , table_organe.Symbole
  , rle_orgposition.position  
  FROM table_organe 
  LEFT JOIN table_famille ON table_organe.Famille= table_famille.ID
  LEFT JOIN rle_orgposition ON table_organe.id = rle_orgposition.idOrgane

BIG EDIT的答案已更新..

第二个查询有效,因为您使用select *(所有列)而没有提及任何指定的列名.. 在第一个查询中,在没有适当表别名的情况下使用()FROM()LEFT的情况下,具有命名列名称的select不会使用任何别名..这会引发错误..

您可以使用上面提供的查询轻松地进行检查

答案 1 :(得分:0)

像这样的C#代码:

var statement = @"SELECT table_orgrane.id, table_orgrane.Famille
FROM table_organe
LEFT JOIN table_famille ON table_organe.Famille = table_famille.ID  
LEFT JOIN rle_orgposition ON table_organe.id = rle_orgposition.idOrgane";

使用columns代替*