phpbar.de logo

Mailinglisten-Archive

Re: Datenintegritaet bewahren .. aber wie ?
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Datenintegritaet bewahren .. aber wie ?



ist es denn sinnvoll, eine Bedingung auf einer Spalte einer optionalen
Tabelle zu setzen?
Bsp:
Tabelle1
- ID
- SpalteTab1

Tabelle2
- ID
- Tab1ID
- SpalteTab2

hole alle aus Tabelle1 und nur passende aus Tabelle2:
SELECT SpalteTab1, SpalteTab2
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.Tab1ID
WHERE SpalteTab2 = 'irgendwas';

jetzt kommen alle Einträge aus Tabelle 1 und wenn es gleiche IDs in Tabelle2
gibt, die der Bedingung genügen, kommen die auch.
Falls die Bedingung SpalteTab2 aber nicht erfüllt ist, kommt nur die Zeile
aus Tabelle1 und es sieht so aus, daß es keinen Eintrag in Tabelle2 gibt.

Also:
SELECT SpalteTab1, SpalteTab2
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.Tab1ID
WHERE Tabelle2.Tab1ID IS NULL;
würde alle Zeilen aus Tabelle1 lesen und nie etwas aus Tabelle2 bringen.


Das Problem von Andreas Küster läßt sich nur mit Subselect
and ID not in (select ID from ...) lösen oder da es keine Subselect in mySQL
gibt mit temp Tables.

Oder liege ich ganz falsch Martin?

Gruß
Stefan


-----Original Message-----
From: Martin Ramsch <m.ramsch_(at)_computer.org>
To: Deutsche MySQL-Mailingliste <mysql-de_(at)_lists.4t2.com>
Date: Monday, September 27, 1999 9:57 PM
Subject: Re: Datenintegritaet bewahren .. aber wie ?



Das geht schön mit einem LEFT JOIN und dem Test auf NULL-Werte:

  SELECT tab2.id
  FROM   tab2 LEFT JOIN tab1 USING (id)
  WHERE  tab1.id IS NULL;

Wenn es zu einer id aus tab2 keine id in tab1 gibt, dann erzeugt der
LEFT JOIN für tab1 NULL-Werte - und danach kann man testen.

Ciao,
  Martin


---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive