简体   繁体   English

多个表的SCCM SQL查询联接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM