meshdev

ger7 incomplete

Feb 18th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.40 KB | None | 0 0
  1. CREATE TABLE empl (
  2.     name VARCHAR2(64),
  3.     ssn NUMBER(1,0) primary key
  4. );
  5. CREATE TABLE depen (
  6.     name VARCHAR2(64),
  7.     gender NUMBER(1,0),
  8.     essn NUMBER(1,0),
  9.     constraint depen_essnname_pk PRIMARY KEY(essn, name),
  10.     constraint depen_essn_fk foreign key (essn) references empl (ssn)
  11. );
  12.  
  13. --
  14. INSERT INTO empl VALUES ('klaus', 1);
  15. INSERT INTO empl VALUES ('heidi', 2);
  16. INSERT INTO empl VALUES ('hans', 3);
  17. --
  18. INSERT INTO depen VALUES ('hans', 1, 1);
  19. INSERT INTO depen VALUES ('werner', 2, 1);
  20. INSERT INTO depen VALUES ('chihiro', 1, 3);
  21. INSERT INTO depen VALUES ('hinazuki', 2, 2);
  22.  
  23. -- correct
  24. SELECT DISTINCT e.name, e.ssn
  25. FROM empl e join depen d ON (e.ssn = d.essn)
  26. WHERE EXISTS(SELECT * FROM depen d1 WHERE d1.essn = e.ssn AND d1.gender = 1)
  27. AND EXISTS(SELECT * FROM depen d1 WHERE d1.essn = e.ssn AND d1.gender = 2);
  28.  
  29. -- fancy correct
  30. SELECT d1.essn
  31.  FROM depen d1 JOIN empl e1 ON d1.essn = e1.ssn
  32.  WHERE d1.gender = 1
  33. INTERSECT
  34.  SELECT d2.essn
  35.  FROM depen d2 JOIN empl e2 ON d2.essn = e2.ssn
  36.  WHERE d2.gender = 1
  37.  
  38. -- real fancy solution
  39. SELECT d1.essn
  40. FROM depen d1 inner join depen d2 ON d1.essn = d2.essn
  41. WHERE d1.gender = 1 AND d2.gender = 2
  42.  
  43. ---
  44. SELECT d.essn
  45. FROM depen d
  46. WHERE EXISTS (SELECT d1.essn FROM depen d1 WHERE d1.gender = 2)
  47. AND EXISTS (SELECT d2.essn FROM depen d2 WHERE d2.gender = 1)
  48. --minus (select DISTINCT d3.essn from depen d3 where d3.gender = 1 and d3.gender = 2)
Add Comment
Please, Sign In to add comment