我们如何使用旧语法进行 LEFT JOIN ?
假设您有一个 User 表和 UserRole 表,并且您在 User 表中保存了 UserRole 的 ID。
以下是检索所有用户名以及具有新表示法的角色名称的查询:
SELECT U.Username, US.[Desc] FROM [User] U
INNER JOIN UserRole US ON U.UserRoleId = US.Id
这是旧的符号:
SELECT U.Username, US.[Desc] FROM [User] U, UserRole US
WHERE U.UserRoleId = US.Id
现在,我们假设所有用户都没有角色,UserRoleId 为 0 或 NULL。
以下是检索所有用户名以及具有新表示法的角色名称的查询:
SELECT U.Username, US.[Desc] FROM [User] U
LEFT JOIN UserRole US ON U.UserRoleId = US.Id
问题是:我们如何使用旧语法做同样的事情,而不使用“JOIN”一词?
运营商是*=
and =*
(取决于每列位于谓词的哪一侧):
SELECT U.Username, US.[Desc]
FROM [User] U, UserRole US
WHERE U.UserRoleId *= US.Id
不过,自 SQL Server 2012 以来,这些已被弃用,从那时起,24 年前已停止使用的连接语法就不再具有向后兼容性。
我不知道你为什么要使用这个,但这里有一些理由可以让你远离黑暗面:
改掉的坏习惯:使用旧式的 JOIN https://sqlblog.org/2009/10/08/bad-habits-to-kick-using-old-style-joins
或者,如果您想要一种无需连接或专有语法的替代方法,您可以使用:
SELECT U.Username, US.[Desc]
FROM [User] U, UserRole US
WHERE U.UserRoleId = US.Id
UNION ALL
SELECT U.Username, NULL
FROM [User] U
WHERE NOT EXISTS (SELECT 1 FROM UserRole US WHERE U.UserRoleId = US.Id);
但再一次,为什么还要麻烦呢?LEFT JOIN
语法是在 ANSI 92 中引入的,如果您不能在数据库中使用它,那么是时候更改您的数据库供应商,而不是您的语法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)