2016-08-10 3 views
0

Ich habe 2 separate Abfragen und möchte join sie und weiß nicht wie. Wenn ich die unten erhalte ich die Fehler laufen:Wie zwei Abfragen beitreten?

The used SELECT statements have a different number of columns.

Wie join ich sie erfolgreich?

erste Abfrage

SELECT 

hardware_info.id as ComputerID, 
software_info.OSPlatform as OperatingSystemName, 
software_info.OSVersion as OSVersion, 
agent_info.AgentName as DeviceName, 
hardware_info.last_modified as LastUpdate, 
software_info.AD_MachineOUPath as NTDomainName, 
software_info.AD_UserOUPath as AD_Site, 
hardware_info.ComputerManufacturer as Manufacturer, 
hardware_info.MachineModel as Model, 
hardware_info.CPUCount as NoOfCPUs, 
software_info.OSPlatform as OperatingSystemName, 
hardware_info.MachineSerialno as SerialNumber, 
hardware_info.CPUIDString as CPUDescription, 
hardware_info.CPUSpeed as MaxClockSpeed, 
hardware_info.PrimaryMACAddress as PhysicalAddress, 
hardware_info.PhysicalMemorySize as Memory  

FROM 
agent_info, 
hardware_info, 
software_info, 
machine_tracking_info, 
installed_software_titles  
WHERE 
agent_info.heartbeat_record_id = hardware_info.agent_info_record_id limit 10 

Abtastergebnis

ComputerID 1  
OperatingSystemName 116 
OSVersion 1584 
DeviceName USALVWAM1  
LastUpdate 2016-07-08 04:27:01 
NTDomainName Servers\from New Computers 
AD_Site Global-Users\US\CS 
Manufacturer VMware, Inc.  
Model GenericPC 
NoOfCPUs 1 
OperatingSystemName SerialNumber VMware-42 04 90 30 1d a2 bc dc-69 a6 eb 47 68 76 b1 3b  
CPUDescription Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz 
MaxClockSpeed 2500000000 
PhysicalAddress 00:50:56:84:40:50 
Memory 4294967296 

**second query** 
SELECT 
enum_value as osplatform 
FROM 
software_info 
INNER JOIN 
    enum_osplatform ON software_info.OSPlatform = enum_osplatform.enum_key 

**SAMPLE RESULT** 

osplatform windows 2012 r2 
+0

Fügen Sie ein Beispielergebnis aus den zwei Abfragen hinzu, und zeigen Sie uns dann das kombinierte Ergebnis an. – jarlh

+0

Ihre zweite Select-Abfrage ist falsch, korrigieren Sie es. –

+2

Auch Ihre erste Abfrage hat nur 1 Join-Bedingung, aber 5 Tabellen sind verbunden (implizit). Absichtlich?!? Tipp von heute: Wechseln Sie in die moderne, explizite 'JOIN'-Syntax - einfacher zu schreiben (ohne Fehler), einfacher zu lesen und einfacher in Outer Join zu konvertieren, falls erforderlich. – jarlh

Antwort

2

Nummernfeld im Schlepptau Abfrage muss gleich sein.

versuchen, wie diese

SELECT 
    hardware_info.id as ComputerID, 
    agent_info.AgentName as DeviceName, 
    hardware_info.last_modified as LastUpdate, 
    software_info.AD_MachineOUPath as NTDomainName, 
    software_info.AD_UserOUPath as AD_Site, 
    hardware_info.ComputerManufacturer as Manufacturer, 
    hardware_info.MachineModel as Model, 
    hardware_info.CPUCount as NoOfCPUs,   
    hardware_info.MachineSerialno as SerialNumber, 
    hardware_info.CPUIDString as CPUDescription, 
    hardware_info.CPUSpeed as MaxClockSpeed, 
    hardware_info.PrimaryMACAddress as PhysicalAddress, 
    hardware_info.PhysicalMemorySize as Memory, 
    software_info.OSVersion , 
    software_info.OSPlatform as OperatingSystemName, 
    null  
FROM 
    agent_info, 
    hardware_info, 
    software_info, 
    machine_tracking_info, 
    installed_software_titles  
WHERE 
    agent_info.heartbeat_record_id = hardware_info.agent_info_record_id 

union 

SELECT 
    null as ComputerID, 
    null as DeviceName, 
    null as LastUpdate, 
    null as NTDomainName, 
    null as AD_Site, 
    null as Manufacturer, 
    null as Model, 
    null as NoOfCPUs,   
    null as SerialNumber, 
    null as CPUDescription, 
    null as MaxClockSpeed, 
    null as PhysicalAddress, 
    null as Memory, 
    null as OSVersion, 
    osplatform ,enum_value 
FROM 
    software_info 
INNER JOIN 
    enum_osplatform ON software_info.OSPlatform = enum_osplatform.enum_key 
+0

Ashkufaraz, danke, aber ich bekomme den gleichen Fehler mit Ihrem. – sql1

+0

Ich habe das Feld "OSVersion" verpasst, überprüfe meinen Code erneut – ashkufaraz

+0

wenn ich jetzt hänge, hängt es einfach? Ich habe sowohl Skripte als auch Beispielergebnisse in meinem Hauptpost bearbeitet und gepostet. Ich hoffe, das ist klar. – sql1

0

Wie oben Sie UNION können und NULL ‚s im zweiten Teil verwenden.

Ich habe es anders angegangen. Füllen Sie einfach den XXX aus, wenn Sie die Informationen bereitstellen.

SELECT 
h.id AS ComputerID, 
a.AgentName AS DeviceName, 
h.last_modified AS LastUpdate, 
s.AD_MachineOUPath AS NTDomainName, 
s.AD_UserOUPath AS AD_Site, 
h.ComputerManufacturer AS Manufacturer, 
h.MachineModel AS Model, 
h.CPUCount AS NoOfCPUs, 
s.OSPlatform AS OperatingSystemName, 
h.MachineSerialno AS SerialNumber, 
h.CPUIDString AS CPUDescription, 
h.CPUSpeed AS MaxClockSpeed, 
h.PrimaryMACAddress AS PhysicalAddress, 
h.PhysicalMemorySize AS Memory, 
s.OSVersion, 
enum_value as OSPlatform 
FROM agent_info a 
INNER JOIN hardware_info h ON a.heartbeat_record_id = h.agent_info_record_id 
INNER JOIN software_info s ON a.heartbeat_record_id = s.agent_info_record_id 
INNER JOIN enum_osplatform e ON s.OSPlatform = e.enum_key 
+0

danke Matt. Ich bin mir nicht sicher, was du meinst, wenn du die X's ausfüllst? – sql1

+0

@ sql1 wie verbindet sich die Software-Info-Tabelle mit den anderen Tabellen – Matt

+0

Sorry matt nicht sicher, was du meinst. Alles, was ich weiß, ist die zweite Abfrage oben erhält mir diese Informationen. Gibt es einen Weg, das herauszufinden? – sql1