• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

SQL Abfrage

Mitglied seit
19.03.2002
Beiträge
2.539
Reaktionen
11
Gegeben ist das Schema LIEFERANT(FIRMA,WARE,PREIS)
Frage: Wer liefert alle Waren, die auch die Firma Meier liefert?
Ergebnis, bei dem ich zugegebenermassen etwas Hilfe hatte:
select Konkurenz from (
SELECT
l2.firma as Konkurenz,
COUNT(l1.ware) as matches,
(SELECT COUNT(ware) FROM lieferant WHERE firma = 'meier') as count_meier,
(SELECT COUNT(ware) FROM lieferant WHERE firma = l2.firma) as count_matcher
FROM lieferant l1, lieferant l2
WHERE
l1.ware = l2.ware
AND l1.firma <> l2.firma
AND l1.firma = 'meier'
GROUP BY l2.firma
HAVING matches = count_meier
AND count_matcher = matches) as resTbl

Sehen wir den Wald vor lauter Bäumen nicht, oder gibt es dafür keine einfachere Version?

Datenbasis:

CREATE TABLE IF NOT EXISTS `lieferant` (
`firma` varchar(50) NOT NULL,
`ware` varchar(50) NOT NULL,
`preis` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


INSERT INTO `lieferant` (`firma`, `ware`, `preis`) VALUES
('meier', 'mehl', 50),
('meier', 'milch', 100),
('müller', 'mehl', 45),
('müller', 'milch', 110),
('schmitt', 'mehl', 55),
('schmitt', 'eier', 70),
('schulz', 'milch', 100),
('kohl', 'milch', 110),
('kohl', 'eier', 65),
('bahr', 'milch', 105),
('bahr', 'mehl', 70);
 
Mitglied seit
14.08.2006
Beiträge
131
Reaktionen
0
kp ob es noch aktuell ist, aber du kannst auch einfach nen join mit derselben tabelle machen. müsste dann so in der art aussehen (habs nicht getestet)

SELECT DISTINCT l2.firma
FROM Lieferant l1
LEFT JOIN Lieferant l2 ON l1.ware = l2.ware
WHERE l2.firma != 'meier';
 
Zuletzt bearbeitet:
Mitglied seit
19.03.2002
Beiträge
2.539
Reaktionen
11
select l1.firma from lieferant l1, lieferant l2 WHERE l1.ware = l2.ware AND l2.firma = 'meier' AND l1.firma != 'meier' Group by l1.firma having count(l1.ware) = (select count(l3.ware) from lieferant l3 WHERE l3.firma = 'meier')

Das ist wohl 'ne einfache Lösung.
Geht in 'ne ähnliche Richtung.
 
Oben