phpbar.de logo

Mailinglisten-Archive

referentielle =?iso-8859-1?Q?Integrit=E4t?= innerhalb einer Tabelle

referentielle Integrität innerhalb einer Tabelle

Christoph Siefer mysql-de_(at)_lists.bttr.org
Thu, 23 May 2002 14:08:05 +0200


Hallo Liste,

ja, richtig gelesen: innerhalb einer Tabelle. 

Tabelle "table" enthält drei Spalten:

ID	|	parent_ID 	|	node_ID
------------------------------------------------
123	|			|	
456	|	123		|	123
789	|	456		|	123
abc	|			|	
def	|	abc		|	abc
ghi	|	def		|	abc
jkl	|	789		|	123

die Tabelle enthält also einen Baum. Jetz gibt es 'broken' branches,
wenn ein node oder parent gelöscht wird. 

Meine Query bringt halt nur alle Records raus, die einen entsprechenden
node oder Parent haben:

SELECT 
table_b.ID as b_ID, 
table_a.ID as a_ID, 
table_a.parent_ID as a_parent, table_a.node_ID as a_node 
FROM 
table AS table_a 
LEFT OUTER JOIN 
table AS table_b 
ON (table_a.parent_ID=table_b.ID OR table_a.node_ID=table_b.ID)

wenn ich jetzt meine Bedingung formuliere bekomme ich natürlich nix mehr
zurück:

WHERE 
ISNULL(table_b.ID) 
AND NOT ISNULL(table_a.parent_ID)
OR NOT ISNULL(table_a.node_ID)

Im Manual finde ich nichts zum Thema JOINs in der selben Tabelle -
ausserdem habe ich den Eindruck, dass ich irgendwas ganz und garnicht
verstanden habe. Dies Query hier habe ich nach Kofler zusammengebaut,
sie sieht aber schon für einen Anfänger wie mich nicht so aus, als
könnte da was sinnvolles zurückkommen. Also: was ich brauche, sind die
Records mit parent_ID oder node_ID, die keinen korrespondierenden Record
mit ID finden (ich habe auch die Tabellenreihenfolge schon verdreht...).

Wie geht's?

Danke an alle Antworter,

Christoph Siefer
-- 

sym.net  -  martin butz & christoph siefer gbr
zwirnerstrasse 26 - 50678 koeln - 0221/3762591
email: siefer_(at)_sym.net - netz: http://www.sym.net

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive