编写一个查询以显示所有没有后付费电表的建筑物的所有建筑物名称、它们的计量公司名称和电表类型。
图1是我应该得到的结果,图2是我得到的结果:
USE Ultimate_DataBase
GO
SELECT [Bld_Name], [Elec_company_name], [Mtype_Name]
FROM [dbo].[Metering_Company] A
FULL OUTER JOIN [dbo].[Metering_Type] D
ON A.[MType_ID]= D.MType_ID
FULL OUTER JOIN [dbo].[Building_metering] B
ON A.[Elec_ID]= B.[Elec_ID]
FULL OUTER JOIN [dbo].[Building] C
ON C.[Bld_ID]= B.[Bld_ID]
WHERE [Mtype_Name] != 'POSTPAID'
3条答案
按热度按时间yrefmtwq1#
试着移动
WHERE
对应的逻辑ON
条款:注意:请在select子句中添加别名。它们不是强制性的,假设没有两个表有同名的列,但是只要有别名就可以让您的问题更容易回答。
nhaq1z212#
FULL JOIN
似乎没有必要——事实上FULL JOIN
几乎从不需要,尤其是日常生活中JOIN
在一个结构良好的数据库中。问题的结构表明
NOT EXISTS
:你也可以用
LEFT JOIN
和过滤:这允许您从任何表中选择列。
笔记:
FULL JOIN
几乎不需要。使用有意义的表别名!武断的字母毫无意义。使用表格缩写。
用方括号转义列名和表名只会使代码更难编写和读取。
ikfrs5lh3#
用这个