[英]SCCM SQL Query Join of Multiple tables
Here is a Question for all of you SQL brains out there. 这是一个针对所有您的SQL头脑的问题。 I am joining several tables from my SCCM database.
我正在从SCCM数据库中加入几个表。 I am trying to join multiple tables.
我正在尝试加入多个表。 Here is my query:
这是我的查询:
SELECT v_R_System.Name0,
v_GS_SYSTEM_ENCLOSURE.ChassisTypes0,
v_GS_SYSTEM_ENCLOSURE.Manufacturer0,
v_GS_SYSTEM_ENCLOSURE.Model0,
v_R_System.Operating_System_Name_and0,
v_R_User.User_Name0,
v_UsersPrimaryMachines.UserResourceID ,
v_R_User.Full_User_Name0,
v_R_System.Is_Virtual_Machine0,
v_GS_X86_PC_MEMORY.TotalPhysicalMemory0,
v_RA_System_IPAddresses.IP_Addresses0
FROM v_R_System
LEFT JOIN v_GS_SYSTEM_ENCLOSURE
ON v_R_System.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
LEFT JOIN v_RA_System_IPAddresses
ON v_R_System.ResourceID = v_RA_System_IPAddresses.ResourceID
LEFT JOIN v_GS_X86_PC_MEMORY
ON v_R_System.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
LEFT JOIN v_UsersPrimaryMachines
ON v_R_System.ResourceID = v_UsersPrimaryMachines.MachineID
LEFT JOIN v_R_User
ON v_UsersPrimaryMachines.UserResourceID = v_R_User.ResourceID
WHERE (v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%')
In my results, I am getting the same machine listed multiple times for the same computer. 在我的结果中,同一台计算机多次列出同一台计算机。 I would expect to see this for every user listed for the computer.
我希望为计算机列出的每个用户都能看到此信息。 So, the issue I have is that I want all computers to be listed at least once.
所以,我的问题是我希望所有计算机至少列出一次。 Computers that match RecsourceID in the UsersPrimaryMachine table should show for as many primary users are listed that have a matching UserResourceID in the v_R_User table.
与Users_PrimaryMachine表中的RecsourceID匹配的计算机应显示列出的v_R_User表中具有匹配的UserResourceID的主用户数量。 I am guessing I need to change a JOIN somewhere to INNER JOIN.
我猜我需要将JOIN更改为INNER JOIN。 But as soon as I do, I only list the 2 CLIENT machines 2 times each.
但是,一旦我这样做,我只会列出2台CLIENT机器,每台2次。
Name0 ChassisTypes0 Manufacturer0 Model0 Operating_System_Name_and0 User_Name0 UserResourceID Full_User_Name0 Is_Virtual_Machine0 TotalPhysicalMemory0 IP_Addresses0
SCCM-2K12 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 4193780 192.168.91.15
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) puser 2063597571 Paul User 1 1048052 192.168.91.103
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) juser 2063597572 John User 1 1048052 192.168.91.103
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) NULL 2080374786 NULL 1 1048052 192.168.91.103
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) NULL 2080374787 NULL 1 1048052 192.168.91.103
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) NULL 2080374789 NULL 1 1048052 192.168.91.103
WIN8-CLIENT1 1 No Enclosure NULL Microsoft Windows NT Workstation 6.2 (Tablet Edition) NULL 2080374790 NULL 1 1048052 192.168.91.103
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) jdoe 2063597570 Jane Doe 1 2096628 192.168.91.100
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) puser 2063597571 Paul User 1 2096628 192.168.91.100
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) NULL 2080374786 NULL 1 2096628 192.168.91.100
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) NULL 2080374787 NULL 1 2096628 192.168.91.100
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) NULL 2080374789 NULL 1 2096628 192.168.91.100
WIN81-CLIENT2 1 No Enclosure NULL Microsoft Windows NT Workstation 6.3 (Tablet Edition) NULL 2080374790 NULL 1 2096628 192.168.91.100
SCSM-2K12 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 4193780 192.168.91.12
SCSM-SSP 1 No Enclosure NULL Microsoft Windows NT Server 6.1 NULL NULL NULL 1 2096632 192.168.91.17
MAIL 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 6290932 192.168.91.11
SCOM-2K12-DB 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 4193780 192.168.91.19
SCOM-2K12 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 2096628 192.168.91.18
SCORCH-2K12 1 No Enclosure NULL Microsoft Windows NT Server 6.2 NULL NULL NULL 1 2096628 192.168.91.21
SCDW-2K12 NULL NULL NULL Microsoft Windows NT Server 6.2 NULL NULL NULL NULL NULL 192.168.91.13
SHARE-2K8 NULL NULL NULL Microsoft Windows NT Server 6.1 NULL NULL NULL NULL NULL 192.168.91.16
IIS-2K12 NULL NULL NULL Microsoft Windows NT Server 6.2 NULL NULL NULL NULL NULL 192.168.91.14
Whoever can figure this out would be my hero! 谁能弄清楚这一点,将是我的英雄!
try changing one of left join ON v_R_System.ResourceID = v_UsersPrimaryMachines.MachineID
尝试更改左连接之一
ON v_R_System.ResourceID = v_UsersPrimaryMachines.MachineID
LEFT JOIN v_GS_SYSTEM_ENCLOSURE
ON v_R_System.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
LEFT JOIN v_RA_System_IPAddresses
ON v_R_System.ResourceID = v_RA_System_IPAddresses.ResourceID
LEFT JOIN v_GS_X86_PC_MEMORY
ON v_R_System.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
LEFT JOIN v_UsersPrimaryMachines
ON v_R_System.ResourceID = v_UsersPrimaryMachines.MachineID
LEFT JOIN v_R_User
ON v_UsersPrimaryMachines.UserResourceID = v_R_User.ResourceID
WHERE (v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%')
to: 至:
LEFT JOIN v_GS_SYSTEM_ENCLOSURE
ON v_R_System.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
LEFT JOIN v_RA_System_IPAddresses
ON v_R_System.ResourceID = v_RA_System_IPAddresses.ResourceID
LEFT JOIN v_GS_X86_PC_MEMORY
ON v_R_System.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
LEFT JOIN v_UsersPrimaryMachines
ON v_R_System.ResourceID = v_UsersPrimaryMachines.UserResourceID
LEFT JOIN v_R_User
ON v_UsersPrimaryMachines.UserResourceID = v_R_User.ResourceID
WHERE (v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%')
Full Query 完整查询
SELECT v_R_System.Name0,
v_GS_SYSTEM_ENCLOSURE.ChassisTypes0,
v_GS_SYSTEM_ENCLOSURE.Manufacturer0,
v_GS_SYSTEM_ENCLOSURE.Model0,
v_R_System.Operating_System_Name_and0,
v_R_User.User_Name0,
v_UsersPrimaryMachines.UserResourceID ,
v_R_User.Full_User_Name0,
v_R_System.Is_Virtual_Machine0,
v_GS_X86_PC_MEMORY.TotalPhysicalMemory0,
v_RA_System_IPAddresses.IP_Addresses0
FROM v_R_System
LEFT JOIN v_GS_SYSTEM_ENCLOSURE
ON v_R_System.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
LEFT JOIN v_RA_System_IPAddresses
ON v_R_System.ResourceID = v_RA_System_IPAddresses.ResourceID
LEFT JOIN v_GS_X86_PC_MEMORY
ON v_R_System.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
LEFT JOIN v_UsersPrimaryMachines
ON v_R_System.ResourceID = v_UsersPrimaryMachines.UserResourceID
LEFT JOIN v_R_User
ON v_UsersPrimaryMachines.UserResourceID = v_R_User.ResourceID
WHERE (v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%')
Ok. 好。 I did some more poking around last night.
昨晚我又戳了一些。 I ended up with a subselect that got me the results I was looking for.
我最终得到了一个子选择,该选择使我得到了想要的结果。 Thanks for the help.
谢谢您的帮助。 Here is what I ended up with:
我最终得到的是:
SELECT
S.Name0,
S.Operating_System_Name_and0,
S.Is_Virtual_Machine0,
US.Full_User_Name0,
US.User_Name0,
v_GS_SYSTEM_ENCLOSURE.ChassisTypes0,
v_GS_SYSTEM_ENCLOSURE.Manufacturer0,
v_GS_SYSTEM_ENCLOSURE.Model0,
v_GS_X86_PC_MEMORY.TotalPhysicalMemory0,
v_RA_System_IPAddresses.IP_Addresses0
FROM v_R_System S
LEFT JOIN v_GS_SYSTEM_ENCLOSURE
ON S.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
LEFT JOIN v_RA_System_IPAddresses
ON S.ResourceID = v_RA_System_IPAddresses.ResourceID
LEFT JOIN v_GS_X86_PC_MEMORY
ON S.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
LEFT JOIN
(SELECT
U.User_Name0,
UPM.UserResourceID,
UPM.MachineID,
U.Full_User_Name0
FROM v_UsersPrimaryMachines UPM
JOIN v_R_User U
ON UPM.UserResourceID = U.ResourceID) US
ON S.ResourceID = US.MachineID
WHERE (v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.