MySQL NICHT aus einer anderen Spalte in der gleichen Tabelle
Möchte ich laufen, eine mysql-Abfrage wählen Sie alle Zeilen aus einer Tabelle films
denen der Wert der title
Spalte existiert nicht, nirgendwo, in der alle Werte einer anderen Spalte (collection
).
Hier ist eine vereinfachte version meiner Tabelle mit Inhalt:
mysql> select * from films;
+----+--------------+--------------+
| id | title | collection |
+----+--------------+--------------+
| 1 | Collection 1 | NULL |
| 2 | Film 1 | NULL |
| 3 | Film 2 | Collection 1 |
+----+--------------+--------------+
Hier ist meine Abfrage:
mysql> SELECT * FROM films WHERE title NOT IN (SELECT collection FROM films);
Empty set (0.00 sec)
In diesem Beispiel, ich würde wollen, markieren Sie die Zeilen mit Titeln Film 1
und Film 2
, aber meine Anfrage zurück, die keine Zeilen.
Hier ist die Struktur der Tabelle:
CREATE TABLE `films` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL DEFAULT '',
`collection` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Der Grund, warum man nicht wieder alle Zeilen ist, weil NULL nicht berücksichtigt wird in dem ResultSet. Ich habe den leisen Verdacht, wenn Sie ersetzen, NULL durch einen Leerstring, kann dies Ihr problem lösen.
Getestet habe ich diese und es scheint nicht das Problem sein.
Dies ist ein dup von stackoverflow.com/questions/1001144/...
Getestet habe ich diese und es scheint nicht das Problem sein.
Not in (Set containing null)
immer gibt keine Zeilen zurück.Dies ist ein dup von stackoverflow.com/questions/1001144/...
InformationsquelleAutor jessica | 2013-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQLFiddle: http://sqlfiddle.com/#!2/76278/1
IN
version als auchDanke, ich bin Annahme von dir, weil es die erste richtige Antwort (und die, die ich nutzen werde). Können Sie erklären, warum die
is not null
macht es Arbeit?ist nicht null ist notwendig, da die semantische Spezifikation von nicht erfordert, dass der Satz nicht enthalten keine null-element. Siehe die Dokumentation in dev.mysql.com/doc/refman/5.0/en/comparison-operators.html, wo es heißt , Um die Einhaltung des SQL-Standards, BEI NULL zurück, nicht nur, wenn der Ausdruck auf der linken Seite ist NULL, aber auch wenn keine übereinstimmung in der Liste gefunden wird und einer der Ausdrücke in der Liste ist NULL.
danke!!!
InformationsquelleAutor a_horse_with_no_name
Haben Sie versucht, mit
NOT EXISTS
:Sehen SQL Fiddle mit Demo
Wenn Sie verwenden möchten
IN
dann werden Sie wollen, zu suchen für Werte, dieNOT NULL
:Sehen SQL Fiddle mit Demo
Das Ergebnis für beide ist:
Sich das problem mit dem aktuellen Abfrage-Diebstahl aus @Quassnoi Antwort hier:
Da die
null
Wert zurückgegeben wird, indem Sie Ihre Unterabfrage möchten Sie ausdrücklich ausschließen.title = collection
Tat es.Sie verlangten zusätzliche details, warum Sie benötigen, heraus zu filtern
null
Werte aus der Unterabfrage -- siehe diesen link oder diese one. Oder auch dieses Frage beantwortet von der gleichen person, wer schrieb diesen Artikel.InformationsquelleAutor Taryn
Weitere option, mit einem äußeren join
InformationsquelleAutor EvilBob22
Versuchen Sie diese bitte:
Abfrage:
Ergebnisse: basierend auf dem Beispiel der Tabelle I verwendet.
BEARBEITEN HINZUFÜGEN : HIER MIT OP-SCHEMA
OP SHCEMA SQLFIDDLE DEMO
meine Logik ist korrekt, wenn 🙂 außerdem habe ich ein OP-schema.
bitte geben Sie einen Versuch auf diese so gut und zu kommentieren. 🙂
InformationsquelleAutor bonCodigo
Ι musste die Auswahl der zur Verfügung stehenden Tabellennamen für
matching date_time
Beispiel
select available table_name where date_time = 2014-08-18 12:00 am.
Lösung Abfrage ist:
ich bin sicher, das funktioniert gut
InformationsquelleAutor Aham Brammashmi Pathy