2016-09-20 2 views
0

Ich versuche, eine Abfrage zu schreiben, die alle Filme in SAKILA-Datenbank zurückgeben wird, die Französisch als Originalsprache haben. Das erwartete Ergebnis ist 0 Zeilen.Diskrepanz in SQL-Ergebnis beim Verbinden von Tabellen

Wenn ich language_id verwenden Titel mit Französisch als Sprache zu finden, die ich bekommen das erwartete Ergebnis:

SELECT title, release_year FROM sakila.film WHERE language_id =5; 

jedoch Ich versuche, dieses Ergebnis zu erhalten, ohne Literale mit (language_id) und stattdessen die Verbindungs zwei Tabellen, um die Originalsprache des Films auszuwählen.

Wenn ich schreibe:

SELECT title, release_year 
FROM sakila.film, sakila.language 
WHERE language.name = 'french'; 

ich alle Zeilen bekommen.

Antwort

0

Falls Sie möchten, die Sie nicht verwenden beitreten, müssen eine Bedingung hinzuzufügen, im Inneren, wo .

SELECT title, release_year 
FROM sakila.film, sakila.language 
WHERE language.name = 'french' and film.language_id = language.id 
+0

Ich denke, das ist sehr nahe. Ich bekomme einen Fehler. "Unbekannte Spalte 'language.id' in 'Where-Klausel'." Könnte das mit der Tatsache zu tun haben, dass "Sprache" ein Schlüsselwort ist? –

+0

Können Sie versuchen, sprache.id in language.language_id zu ändern? Es hängt davon ab, welche Spalte die ID für die Tabellensprache ist. – HarryQuake

+0

* Wenn Sie nicht Join verwenden möchten *: Dies ist immer noch ein Join, nur dass es die veraltete und veraltete Joinsyntax verwendet. – sstan

0

Sie haben keine Join-Bedingung zwischen Ihren beiden Tabellen angegeben. Als Ergebnis erzeugt die Abfrage ein kartesisches Produkt, definitiv nicht das, was Sie wollen.

Hatten Sie verwendet die ANSI-Stil kommen, wäre die Syntax, die Sie in die richtige Richtung geschubst:

select f.title, f.release_year 
    from film f 
    join language l 
    on l.language_id = f.language_id -- you are missing this join condition 
    and l.name = 'french'