d2c1.sql 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. SELECT f1.person2, f2.person2
  2. FROM FriendshipSymmetric f1
  3. JOIN FriendshipSymmetric f2
  4. ON f1.person1 = f2.person1
  5. LEFT JOIN FriendshipSymmetric f3
  6. ON f1.person2 = f3.person1 AND f2.person2 = f3.person2
  7. WHERE f1.person2 != f2.person2
  8. AND f1.person1 = <id>
  9. AND p3.person1 IS NULL
  10. AND p3.person2 IS NULL
  11. Weitere Erklärungen:
  12. Ansatz:
  13. 1. Suche alle Personenpaare, die beide <id> als Freund haben (wobei
  14. nur ungleiche paare gesucht sind, da man nicht mit sich selbst befreundet
  15. sein kann)
  16. 2. Prüfe über die Menge dieser Paare, welche noch nicht befreundet sind
  17. Dazu:
  18. 1. SELECT f1.person2, f2.person2 FROM FriendshipSymmetric f1
  19. JOIN FriendshipSymmetric f2 ON f1.person1 = f2.person1
  20. WHERE f1.person2 != f2.person2
  21. AND f1.person1 = <id>;
  22. 2. Ein LEFT JOIN ergänzen, um zu ermitteln, welche Paare nicht tatsächlich
  23. in FriendshipSymmetric stehen (diese werden NULL joinen). Daher nach NULL
  24. selektieren
  25. Beispielhaftes Ergebnis für gegebene Situation und id=4:
  26. "1","5"
  27. "2","5"
  28. "3","5"
  29. "5","1"
  30. "5","2"
  31. "5","3"