Suche SELECT-Statement

DaRula

Erfahrenes Mitglied
Guten Morgen,

ich bin ein wenig überfordert mit einem Select. mein DB-Design sieht wie folgt aus:

Code:
Tabelle1
pk: vid

Tabelle2
pk: iid

Tabelle1_Tabelle2_ref
pk: vid, iid

Ich habe jetzt mehrere iids und ich will überprüfen, ob schon ein vid vorhanden ist, welches genau die gleichen iids beherbergt (also in Tabelle1_Tabelle2_ref vorhanden ist), also nicht mehr und nicht weniger iids hat. Ich steh grad irgendwie auf'm Schlauch. Kann mir da jemand helfen?
 
Du meinst so etwas:
Code:
select [feldliste] 
from tabelle1 t1, 
tabelle1_tabelle2_ref ref,
tabelle2 t2
where t1.id = ref.id
and t2.iid = ref.iid

Gruß Marian
 
ne, das ist es noch nicht. Ich geb z.b. 4 iids (13, 24, 34, 43) an und ich will nun wissen, ob ein vid existiert, welches genau diese 4 iids besitzt, jedoch keine fünfte iid (53).

Code:
tabelle1_tabelle2_ref sieht also so aus:
vid | iid
1   -  13
1   -  24
1   -  34
1   -  43
1   -  53
2   -  13
2   -  24
2   -  34
2   -  43

vid 2 wäre also ein treffer für diese Abfrage. vid 1 jedoch nicht, weil es ein Element besitzt, das ich nicht möchte. Ich hoffe, ich hab mich einigermaßen verständlich ausdrücken können.
 
ne, auch nicht. ich möchte ja einen exakten match. auf diese weise finde ich ja immernoch vid 1. wenn ich jetzt folgendes mache:
Code:
select * from tabelle1_tabelle2_ref
where iid in (13, 24, 34, 43, 19)
will ich _keine_ Reihe zurückgeliefert bekommen, weil es keine vid gibt, die _alle_ geforderten iids hat, aber auch nicht weniger. Bei "iid in (13, 24, 34, 43)" soll auf keinen Fall vid 1 auftauchen, da vid 1 ja noch einen Eintrag mehr hat, also nur vid 2
 
Ich habe mir folgende Testtabelle gebaut:
Code:
-- phpMyAdmin SQL Dump
-- version 2.6.2-pl1
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Erstellungszeit: 05. August 2005 um 14:34
-- Server Version: 4.1.10
-- PHP-Version: 5.0.3
-- 
-- Datenbank: `testdb`
-- 

-- --------------------------------------------------------

-- 
-- Tabellenstruktur für Tabelle `alltest`
-- 

CREATE TABLE `alltest` (
  `id1` int(11) unsigned NOT NULL default '0',
  `id2` int(11) unsigned NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 
-- Daten für Tabelle `alltest`
-- 

INSERT INTO `alltest` VALUES (1, 13);
INSERT INTO `alltest` VALUES (1, 14);
INSERT INTO `alltest` VALUES (1, 15);
INSERT INTO `alltest` VALUES (2, 13);
INSERT INTO `alltest` VALUES (2, 14);
INSERT INTO `alltest` VALUES (3, 15);
INSERT INTO `alltest` VALUES (4, 13);
INSERT INTO `alltest` VALUES (5, 14);
Dazu habe ich dieses Query:
Code:
SELECT *
FROM alltest AS t1
WHERE t1.id2 IN (13,14)
  AND (SELECT COUNT(*) 
    FROM alltest AS t2
    WHERE t2.id1=t1.id1
      AND  t2.id2 NOT IN (13,14)) = 0
  AND (SELECT COUNT(*) 
    FROM alltest AS t2
    WHERE t2.id1=t1.id1
      AND  t2.id2 IN (13,14)) = 2
Das gibt mir die beiden Zeilen mit `id1` = 2. Das ließe sich um ein GROUP BY t1.id1 erweitern, um die id nur einmal zu erhalten. Außerdem solltest Du es an Deiner Datenbank noch weiteren Tests unterziehen. Das letzte Zeichen muss die Anzahl der IDs sein, nach denen Du suchst. Kein Paar darf doppelt vorkommen. Da sind bestimmt noch ein paar Bedingungen. Probier es einfach aus. Vereinfachen kann man das Query vielleicht auch noch.

Gruß hpvw
 

Neue Beiträge

Zurück