Einfache Selectabfrage. Ich steh auf dem Schlauch

michaelsoft

Grünschnabel
Ich habe folgende Abfrage

$sql="select a.titel_id, a.titel_bezeichnung, b.titel_id FROM titel a, cover b WHERE a.titel_id = b.titel_id order by titel_bezeichnung ASC";

er gibt mir damit alle titelbezeichnungen aus von denen in der tabelle titel und cover jeweils die titel_id übereinstimmt. ich möchte jedoch das die titel_id beider tabellen mit einander abgeglichen werden und das er mir nur die fehlenden titel_id ausgibt die in der tabelle cover nicht vorhanden sind. habe schon alles ausprobiert mit join, inner join, <> und ich steh auf dem schlauch.
 
Hallo,

versuch es mal mit folgenden Änderungen.

1. Ersetze das "=" durch "<>"

2. oder ersetze es durch "NOT Like" bzw "NOT IN"

da ich meinen SQL-Server im moment nicht nutzen kann, kenn ich dir nicht mit sicherheit sagen ob das so funktioniert


see you msecret
 
Hallo,

versuch doch mal folgendes (sofern deine Datenbank Subqueries unterstützt):

Code:
SELECT a.titel_id, a.titel_bezeichnung
FROM titel a 
WHERE a.titel_id NOT IN (SELECT b.titel_id FROM cover b)
ORDER BY titel_bezeichnung ASC
 
Probiere mal folgendes:
Code:
SELECT a.titel_id 
FROM titel a 
LEFT JOIN cover b ON a.titel_id = b.titel_id
WHERE b.title_id IS NULL

Gruß Alex
 
mail2mrx hat gesagt.:
Probiere mal folgendes:
Code:
SELECT a.titel_id 
FROM titel a 
LEFT JOIN cover b ON a.titel_id = b.titel_id
WHERE b.title_id IS NULL

Hi,
Ich bin mir zwar nicht hundertprozentig sicher, aber ich bezweifel, dass das Query das richtige Ergebnis liefert. Hast du das mal ausprobiert?
Mich würde interessieren, ob das wirklich so funktioniert wie es soll.
Das Beispiel von Frankdfe funktioniert auf jedenfall.
 
@ niggo:
nein, ich habe es nicht ausprobiert. Aber es erinnert mich an ein Beispiel aus dem handbuch von MySQL.
"Wenn es für die rechte Tabelle keinen übereinstimmenden Datensatz im ON- oder USING-Teil eines LEFT JOIN gibt, wird für die rechte Tabelle eine Zeile benutzt, in der alle Spalten auf NULL gesetzt sind. Das können Sie benutzen, um Datensätze in einer Tabelle herauszusuchen, die in einer anderen Tabelle kein Gegenstück haben:

mysql> select tabelle1.* from tabelle1
LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id
where tabelle2.id is NULL;

"

Siehe http://dev.mysql.com/doc/mysql/de/join.html

gruß alex
 
OK, wenn's funktioniert zeh ich meine Zweifel zurück. Ich hätte mir ja auch mal die komplette Erklärung zu OUTER-JOINs durchlesen können, ;)

Aber ich finde das Subselect auf jedenfall eleganter.
Da bleibt bei mir jetzt nur noch eine Frage offen:
Kann MySQL nun SubSelects oder nicht?
 
Zurück