Browse Source

Korrektur + Ergänzung

Korrektur: person1 wird vom Subquery auch benötigt wegen späterem WHERE-Vergleich
Ergänzung: SQLite konnte kein EXCEPT, daher hab ich es mit NOT EXISTS nachgebaut, siehe auch http://stackoverflow.com/questions/3831969/sqlite-delete-results-from-select-with-except
Stefan Koch 12 years ago
parent
commit
fe79dd4081
1 changed files with 23 additions and 2 deletions
  1. 23 2
      documents/musterloesung-db-2012-09-24/d2c2.sql

+ 23 - 2
documents/musterloesung-db-2012-09-24/d2c2.sql

@@ -1,13 +1,34 @@
 SELECT f1.person2, f2.person2 
 FROM (
-    SELECT person2 FROM FriendshipSymmetric WHERE person1 = <id>
+    SELECT * FROM FriendshipSymmetric WHERE person1 = <id>
 ) f1
 JOIN ON
 (
-    SELECT person2 FROM FriendshipSymmetric WHERE person1 = <id>
+    SELECT * FROM FriendshipSymmetric WHERE person1 = <id>
 ) f2
 EXCEPT
 (
     SELECT * FROM FriendshipSymmetric
 )
 WHERE f1.person2 != f2.person2
+
+
+Ohne EXCEPT (da ich mir nicht sicher bin, ob es nun SQL-Standard
+ist oder nicht, z.B. SQLite kenn kein EXCEPT, auf einer Übersicht
+stand es aber bei SQL89 angehakt dabei).
+Hinweis: NOT EXISTS ist True, gdw die Unterabfrage genau 0
+Zeilen enthält.
+
+SELECT f1.person2, f2.person2 
+FROM (
+    SELECT * FROM FriendshipSymmetric WHERE person1 = 4
+) f1
+JOIN
+(
+    SELECT * FROM FriendshipSymmetric WHERE person1 = 4
+) f2 ON f1.person1 = f2.person1
+WHERE f1.person2 != f2.person2
+AND NOT EXISTS 
+(
+    SELECT * FROM FriendshipSymmetric f WHERE f.person1 = f1.person2 AND f.person2 = f2.person2
+)