我的数据库中有3个表。学校(一对多) - 学生(一对一) - 金钱。一切正常,但是我有一个datagridview,内部连接所有三个表,但它不会显示任何在money表中没有任何内容的数据。因此,所有已在金钱表中保存信息的学生也会出现,但我也希望看到那些在金钱表中也没有数据的学生。它应该是怎么回事?感谢
答案 0 :(得分:1)
您可以使用Linq的外部联接来解决它:
List<Person> people = new List<Person> { magnus, terry, charlotte, arlene };
List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };
如果仅使用SQL,则需要在SQL中使用外部联接。
答案 1 :(得分:1)
仅当两者中至少有一行时,内部联接才会返回行 与连接条件匹配的表。内连接消除了行 与另一个表中的行不匹配。
如果你想在你的SQL查询中使用没有Money
记录的节目行使用LEFT JOIN。
SELECT sch.SomeColumn
FROM School sch
INNER JOIN Students sts ON <some students condition>
LEFT JOIN Money m ON <some money condition>
引用和示例来自Sql Server,但也适用于MySql