使用不匹配的外键连接两个表时的空结果集

Posted

技术标签:

【中文标题】使用不匹配的外键连接两个表时的空结果集【英文标题】:Empty result set when Joining two table with Non-match Foreign key 【发布时间】:2013-08-01 00:19:28 【问题描述】:

我正在使用外键连接两个表。 TABLE_1 可能有一行外键为空。这意味着当我根据该外键加入两个表时,我不会得到它的结果。我的问题是,当我在 LINQ 中使用 JOIN 两个表时,我得到一个空结果集。

即使 JOIN 结果与 TABLE_2 不匹配,我也希望能够获取 TABLE_1 中的行。

我尝试在 TABLE_2 的连接中使用 DefaultIfEmpty,但我仍然得到一个空的结果集。即使 TABLE_1 在用于 JOIN 两个表的外键中包含空值,如何连接两个表并仍然得到结果?

谢谢

【问题讨论】:

你检查how to perform left outer joins了吗?您首先需要group join 才能进行外部连接。 【参考方案1】:

你好,试试从 Table2 到 Table1 的左连接

class Program

    static void Main(string[] args)
    
        List<Table1> Table_1 = new List<Table1>();
        Table_1.Add(new Table1()  Id = 1, Name = "Lion" );
        Table_1.Add(new Table1()  Id = 2, Name = "Elephant" );


        List<Table2> Table_2 = new List<Table2>();
        Table_2.Add(new Table2()  Id = 1, Class = "Carnivorous" );
        Table_2.Add(new Table2()  Id = 2, Class = "Herbivorous" );
        Table_2.Add(new Table2()  Id = 3, Class = "Mammal" );
        Table_2.Add(new Table2()  Id = 4, Class = "Aquarious" );


        var result = (from a in Table_2
                      join b in Table_1
                      on a.Id equals b.Id into leftJoin
                      from c in leftJoin.DefaultIfEmpty()
                      select new  Id = a.Id, Name = c == null ? string.Empty : c.Name, Class = a.Class 
                   ).ToList();

        var abc = result;
    


public class Table1

    public int Id;
    public string Name;


public class Table2

    public int Id;
    public string Class;

【讨论】:

【参考方案2】:

如果 LEFT JOIN 不起作用,请尝试 RIGHT JOIN。

【讨论】:

以上是关于使用不匹配的外键连接两个表时的空结果集的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL的连接查询

多条SQL语句对查询结果集的垂直合并

删除表时的外键依赖项

两个端点结果之间的外键映射 RESTKIT Core Data

PHP PDO ODBC 意外的空结果集

将两个数据库列连接到一个结果集列