MySQL: Abfrage nicht existierender Felder

lordlingo

Grünschnabel
ich habe folgende mysql "tabelle":


CREATE TABLE `tabelle` (
`id` varchar(255) NOT NULL default '',
`user_id` varchar(255) NOT NULL default '',
`felder_id` varchar(255) NOT NULL default ''
) TYPE=MyISAM;

INSERT INTO `tabelle` VALUES ('1', '1', '1');
INSERT INTO `tabelle` VALUES ('2', '1', '2');
INSERT INTO `tabelle` VALUES ('3', '1', '3');
INSERT INTO `tabelle` VALUES ('4', '2', '1');
INSERT INTO `tabelle` VALUES ('5', '2', '2');
INSERT INTO `tabelle` VALUES ('6', '3', '1');
INSERT INTO `tabelle` VALUES ('7', '3', '2');
INSERT INTO `tabelle` VALUES ('8', '3', '3');
INSERT INTO `tabelle` VALUES ('9', '4', '1');
INSERT INTO `tabelle` VALUES ('10', '4', '2');

ich möchte alle User_ID's die keine "Felder_ID = 3" haben

-> im Beispiel sollte das Ergebnis also sein: 2,4

meine (falsche lösung ist): select DISTINCT user_id from tabelle where felder_id!=3
-> gibt mir 1,2,3,4 aus
-> warum das so ist, ist mir klar -> habe aber keine lösung für das problem außer einem umständlichen weg über php

Kann mir jemand helfen?

Danke schonmal!
 
Dafür brauchst du eine Unterabfrage.. oder ein gespeicherte abfrage..
Schau dir bitte mal die Syntax vom Operator IN an.
Code:
Select user_id FROM tabelle WHERE Not IN[Select DISTINCT user_id from tabelle where felder_id=3]
 
funktioniert so leider nicht, MySQL will das Subselect nicht.

Irgendwie muß es wohl mit JOINS gehen, aber wie

Kann jemend helfen?

Danke
 
Schau dass du mindestens MySQL Version 4.1.X hast, Subqueries funktionieren erst ab dieser Version.
 
Hab mal ein wenig in meiner Büchersammlung geschmökert
Laut Doku gibt es erst ab Version 4.1 Subselects:
Die Anfragen:
können wie folgt umgeschrieben werden:
SELECT * FROM tabelle1 WHERE id NOT IN (SELECT id FROM tabelle2);
SELECT * FROM tabelle1 WHERE NOT EXISTS (SELECT id FROM tabelle2 where
tabelle1.id=tabelle2.id);

SELECT tabelle1.* FROM tabelle1 LEFT JOIN tabelle2 ON
tabelle1.id=tabelle2.id where tabelle2.id IS NULL


Probiers mal damit:
Code:
Select user_id FROM tabelle as t1 
LEFT JOIN tabelle as t2 ON t1.id=t2.id
WHERE t2.user_Id = 3 and t2.Id IS NULL
 

Neue Beiträge

Zurück