- 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);
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);