【发布时间】:2019-02-11 21:24:52
【问题描述】:
我正在尝试做一个我认为是简单的条件连接的事情,我看到了这个 (SQL server conditional join),它是关闭的,但不是我需要的。我不擅长解释,所以我会尽力举例说明。
设备表:(dev_tbl) dev_id dev_ip 名称 1 192.168.1.10 Core_SW_1 2 192.168.20.5 访问_SW_1 3 192.168.240.1 远程_SW_1 附加数据表:(dev_append) id append_id dev_id append_value 1 8 1 123 玫瑰花蕾 Ln。 2 9 1 个人 3 10 1 管理员 4 8 3 2500 国家公路 5 9 3 我自己 6 10 3 一些用户 附加数据默认值:(dev_append_def) id append_id field_name default_value 1 8 地址无线索 2 9 dev_owner a.person 3 10 audit_by 没人当前 SQL 查询:
SELECT dev_tbl.dev_ip, dev_tbl.dev_name, dev_append.append_value, dev_append_def.field_name
FROM dev_tbl
LEFT JOIN dev_append ON (dev_tbl.dev_id = dev_append.dev_id)
RIGHT JOIN dev_append_def ON (dev_append.append_id = dev_append_def.append_id)
当 dev_append 中有条目时,上面的代码为我提供了所有必要的信息,但正如您所见,它为没有条目的设备返回一个“null”条目。
192.168.1.10 Core_SW_1 123 Rosebud Ln. Address
192.168.1.10 Core_SW_1 a.person dev_owner
192.168.1.10 Core_SW_1 admin audit_by
192.168.20.5 Access_SW_1 NULL NULL
192.168.240.1 Remote_SW_1 2500 National Pkwy Address
192.168.240.1 Remote_SW_1 my.self dev_owner
192.168.240.1 Remote_SW_1 some.user audit_by
我的挂断是我需要从 dev_append_def 获取 field_name 和 default_value IF dev_append 中没有特定于设备的条目,因此输出如下所示。
192.168.1.10 Core_SW_1 123 Rosebud Ln. Address
192.168.1.10 Core_SW_1 a.person dev_owner
192.168.1.10 Core_SW_1 admin audit_by
192.168.20.5 Access_SW_1 NoClue Address
192.168.20.5 Access_SW_1 a.person dev_owner
192.168.20.5 Access_SW_1 nobody audit_by
192.168.240.1 Remote_SW_1 2500 National Pkwy Address
192.168.240.1 Remote_SW_1 my.self dev_owner
192.168.240.1 Remote_SW_1 some.user audit_by
我会像往常一样在包含数组的程序中简单地执行此操作,但我想使用此信息创建一个数据库视图。如果做不到,那也没关系,我会开发一个 Java 应用程序或 PHP 网页。
【问题讨论】:
-
右连接不应该是左连接吗?
-
在这种特殊情况下应该没关系,但如果我得到不寻常的结果,那就太好了。
标签: sql-server