Sql 使用空值连接多个表
我有两张桌子 表1Sql 使用空值连接多个表,sql,Sql,我有两张桌子 表1 StudentID FullName HoursLogged 1 Mark Smith 1 2 Jack Lantern 2 3 Pink Hotdog 3 表2 StudentID FirstName LastName 1 Mark Smith 2 Jack Lantern 3
StudentID FullName HoursLogged
1 Mark Smith 1
2 Jack Lantern 2
3 Pink Hotdog 3
表2
StudentID FirstName LastName
1 Mark Smith
2 Jack Lantern
3 Pink Hotdog
4 Mike Cantu
5 Jake Myers
6 Nathan Cheese
7 Peter Jackson
我怎样才能把桌子做成这样?如果用户没有记录小时数,则记录小时数为0
StudentID FullName HoursLogged
1 Mark Smith 1
2 Jack Lantern 2
3 Pink Hotdog 3
4 Mike Cantu 0
5 Jake Myyers 0
6 Nathan Cheese 0
7 Peter Jackson 0
任何帮助都将不胜感激。谢谢 您可以执行
外部联接
并将空值替换为0,这是很容易实现的方法,下面是外部联接的示例
SELECT t2.StudentID ,t2.FirstName + ' '+ t2.LastName as FullName
ISNULL(HoursLogged,0) as HoursLogged,
FROM Table2 t2
LEFT OUTER Table1 t1
ON t1.studentID = t2.studentID
您可以执行
外部联接
并将空值替换为0,这是您可以轻松实现的方法,下面是外部联接的示例
SELECT t2.StudentID ,t2.FirstName + ' '+ t2.LastName as FullName
ISNULL(HoursLogged,0) as HoursLogged,
FROM Table2 t2
LEFT OUTER Table1 t1
ON t1.studentID = t2.studentID
请尝试以下查询:
select b.StudentID ,concat( FirstName,' ', LastName), ISNULL(HoursLogged,0)
as HoursLogged FROM Table1 a LEFT OUTER Table2 b ON a.StudentID = b.StudentID;
请尝试以下查询:
select b.StudentID ,concat( FirstName,' ', LastName), ISNULL(HoursLogged,0)
as HoursLogged FROM Table1 a LEFT OUTER Table2 b ON a.StudentID = b.StudentID;
这取决于您使用的数据库的类型。检查此项,并使用正确的功能 和CONCAT到CONCAT两个字符串 看起来是这样的
SELECT Ifnull(table1.studentid, table2.studentid)
StudentID,
Ifnull(table1.fullname, Concat(table2.firstname, ' ', table2.lastname))
FullName,
Ifnull(table1.hourslogged, 0)
HoursLogged
FROM table1
LEFT JOIN table2
ON table1.studentid = table2.studentid
而且,您的表设计看起来很糟糕,不一致。FirstName&LastName在1个表中,另一个表有FullName
最好就是这样设计(或类似的东西)
- 学生表(StudentID、FirstName、LastName)
- 小时记录表(学生ID,小时记录)
SELECT Ifnull(table1.studentid, table2.studentid)
StudentID,
Ifnull(table1.fullname, Concat(table2.firstname, ' ', table2.lastname))
FullName,
Ifnull(table1.hourslogged, 0)
HoursLogged
FROM table1
LEFT JOIN table2
ON table1.studentid = table2.studentid
而且,您的表设计看起来很糟糕,不一致。FirstName&LastName在1个表中,另一个表有FullName
最好就是这样设计(或类似的东西)
- 学生表(StudentID、FirstName、LastName)
- 小时记录表(学生ID,小时记录)
选择Table1.StudentID、Table1.FullName、COALESCE(Table2.HoursLogged,0)作为从Table1、Table2中记录的小时数,其中Table1.StudentID=Table2.StudentID是否要将输出全部合并在一起,还是尝试合并表 如果您只是想将表合并到一个输出中,我建议您看看JOIN子句。发布了一个很棒的连接可视化。具体地说,我认为您需要一个左连接,它将合并Table1和Table2,并给您一个输出 此外,由于在表2中将全名拆分为两列,因此必须加入CONCAT。Concat将多个字符串合并为一个字符串,然后您可以使用该字符串进行比较。例如,CONCAT(“字符串1”,“字符串3”)将为您提供“字符串1字符串3”(不带引号) 还要记住,表2中的马克·史密斯似乎在他的姓氏前有一个额外的空格。要解决这个问题,请添加修剪。这将删除前导空格和尾随空格 根据谁/什么/如何组合表,名称可能仍然不完全匹配。如果只进行直接比较(Table1.col=Table2.col),那么名称必须100%匹配,包括大小写(仅供参考,我想说这在Windows托管的数据库中没有那么重要,但我非常确定它在Linux中很重要)。哟