2016-09-30 7 views
1

Ich versuche herauszufinden, wie Zeilen mit leeren Werten mit der Spalte "JobTitleID" angezeigt werden.Wie zeigen Sie Zeilen mit leeren Werten an?

SQL-Datei:

DROP TABLE Employee; 
DROP TABLE JobTitle; 


-- create our table 
CREATE TABLE JobTitle 
(
JobTitleID Number(38) PRIMARY KEY, 
JobTitle VARCHAR2(25) 
) 
; 


CREATE TABLE Employee 
(
EmployeeID Number(38) PRIMARY KEY, 
EmployeeFName VARCHAR2(25), 
EmployeeLName VARCHAR2(25), 
ClientName VARCHAR2(25), 
HoursWorked Number(5,2), 
ChargeRate Number(5,2), 
JobTitleID Number(38), 
CONSTRAINT fkJobTitle FOREIGN KEY (JobTitleID) REFERENCES JobTitle(JobTitleID) 
) 
; 



-- populate tables 

INSERT ALL 
INTO JobTitle (JobTitleID, JobTitle) VALUES (1,'Project Manager') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (2,'Programmer') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (3,'Network Specialist') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (4,'Technical Support') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (5,'Cable Installer') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (6,'DBA') 
INTO JobTitle (JobTitleID, JobTitle) VALUES (7,'Telecom Engineer') 
SELECT * FROM dual; 

INSERT ALL 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (1,'Bob','Smith','Acme Corp.',125.5,72.25,1) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(2,'Bob','Smith','Astro Electric',32,72.25,1) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(3,'Jane','Doe','Acme Corp.',160,25,2) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(4,'Jane','Doe','Astro Electric.',220,25,2) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (5,'Jane','Doe','Durham Tiles',12,25,2) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (6,'Henry','Jones','Lighting Unlimited',245,15,4) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(7,'Jane','Fonda','Whale Mart',275,72.25,1) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(8,'Bill','Murray','Whale Mart',145,20,5) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(9,'Bill','Murray','ABC Logistics',45,20,5) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (10,'John','Jameson','Whale Mart',160,20,5) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (11,'John','Jameson','ABC Logistics',130,20,5) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(12,'John','Jameson','ABM Systems',8,20,5) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(13,'Homer','Simpson','Flitter',345,25,2) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(14,'John','Carpenter','Speedy Messengers',25,15,4) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (15,'John','Carpenter','Flitter',123,15,4) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (16,'John','Carpenter','ABM Systems',67,15,4) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(17,'John','Carpenter','ABC Logistics',23,15,4) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(18,'Mary','Jane','ABM Systems',43,72.25,1) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES(19,'Mary','Jane','Flitter',156,72.25,1) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (20,'Frank','Herbert','Acme Corp.',55,45,3) 
INTO Employee (EmployeeID, EmployeeFName,EmployeeLName,ClientName,HoursWorked,ChargeRate,JobTitleID) VALUES (21,'Kathy','Smith','',0,45,3) 
SELECT * FROM dual; 



COMMIT; 

Bisher habe ich dies:

COLUMN Employee FORMAT a25; 
SELECT JOBTITLE.JOBTITLE AS "Job Title" 
FROM EMPLOYEE 
FULL JOIN JOBTITLE 
ON EMPLOYEE.JOBTITLEID = JOBTITLE.JOBTITLEID 
WHERE EMPLOYEE.JOBTITLEID = 0 
ORDER BY "Job Title"; /*Ordering it by alphabetical order/* 

Jetzt weiß ich, dass WHERE EMPLOYEE.JOBTITLEID = 0 wird wegen der Tabelle nicht funktionieren JobTitle nicht 0 mit als gültig JobTitleID.

Die ouput, die ich suche mich ist:

Job Title 
----------------------- 
DBA 
Telecom Engineer 

Aufgrund dieser Zeilen keine „Mitarbeiter“ haben.

Ich bekomme derzeit keine Zeilen angezeigt.

+0

Sie wollen also Berufsbezeichnungen, die keine Angestellten haben? Suchen Sie nach 'NOT EXISTS' Beispiele –

+0

natürlich in Join-Bedingung Wert von keinem Paar gefunden wird Zeile wird automatisch = null nicht 0 so verwendet (Spalte ist null) statt – Beginner

Antwort

2

Sie können einen left join in der Jobtiteltabelle verwenden.

SELECT DISTINCT JOBTITLE.JOBTITLE AS "Job Title" 
FROM JOBTITLE 
LEFT JOIN EMPLOYEE 
ON EMPLOYEE.JOBTITLEID = JOBTITLE.JOBTITLEID 
WHERE EMPLOYEE.JOBTITLEID IS NULL 
ORDER BY "Job Title"; 

oder not exists verwenden.

select jobtitle 
from jobtitle j 
where not exists (select 1 from employee where jobtitleid = j.jobtitleid) 
order by 1 
1

Sie nur

ändern Sie den Wert der Spalte in der Join-Tabelle
EMPLOYEE.JOBTITLEID = 0 

zu

EMPLOYEE.JOBTITLEID is null 

weil in der Join-Bedingung, die wird automatisch null Beispiel sein

nicht gefunden
students 
+-------------+--------------+--------- 
| id   | name   | section| 
+-------------+--------------+--------- 
|   1 | Stud 1  | 1 | 
|   2 | Stud 2  | 3 | 
+-------------+--------------+--------- 

sections 

+-------------+--------------+---- 
| id   | name | teacher | 
+-------------+--------------+---- 
|   1 | A | Teacher 1 | 
|   2 | B | Teacher 2 | 
+-------------+--------------+---- 

Select students.id, students.name, sections.name from students 
join sections on students.section = sections.id 

RESULT 

+-------------+--------------+--------- 
| id   | name   | section| 
+-------------+--------------+--------- 
|   1 | Stud 1 |  | A | 
|   2 | Stud 2 |  | null | 
+-------------+--------------+--------- 

wie Sie das Ergebnis der nicht gefundenen Abschnitt in der Join ist Null

0

Sie müssen nur überprüfen, die Tabelle Design, wenn das Feld, das Sie ohne Wert suchen, ist nicht numerisch und ermöglicht NULL dann können Sie "IS NULL "in der WHERE-Klausel, sonst ist es ein numerischer Wert, den Sie verwenden können" = '0' "

Verwandte Themen