2017-09-27 156 views
-1

,我有以下關係數據庫:SQL查詢聯接條件

Bar(Name, Address, Licence) 
Beer(Name,Manufacture) 
Drinker(Name,Address) 
Frequents(DrinkerName,BarName) 
Likes(DrinkerName,BeerName) 
Sells(BarName,BeerName,Amount) 
Serves(BarName,BeerName) 

樣品DDL語句:

CREATE TABLE `Bar` (
     `Name` varchar(255) NOT NULL, 
     `Address` varchar(255) DEFAULT NULL, 
     `Licence` varchar(255) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Bar` (`Name`, `Address`, `Licence`) VALUES 
    ('Deluxe', 'Luxvagen 2', 'Yes'), 
    ('Grace', 'Gracevagen 2', 'Yes'), 
    ('KrogBar', 'Barvagen 2', 'Yes'); 

    CREATE TABLE `Beer` (
     `Name` varchar(255) NOT NULL, 
     `Manufacture` varchar(255) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Beer` (`Name`, `Manufacture`) VALUES 
    ('Carlsberg', 'Coppers'), 
    ('Heiniken', 'Spendrups'), 
    ('Miller', 'DaMill'); 

    CREATE TABLE `Boor` (
     `Name` varchar(255) NOT NULL, 
     `Age` int(11) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    CREATE TABLE `Drinker` (
     `Name` varchar(255) NOT NULL, 
     `Address` varchar(255) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Drinker` (`Name`, `Address`) VALUES 
    ('Alex', 'Överbar 2'), 
    ('Bam', 'Påbar 2'), 
    ('Emil', 'Mittibar 2'), 
    ('Max', 'Ibar 2'), 
    ('Petra', 'Förebar 2'), 
    ('Rebecca', 'Efterbar 2'), 
    ('Sam', 'Underbar 2'); 

    CREATE TABLE `Frequents` (
     `DrinkerName` varchar(255) NOT NULL DEFAULT '', 
     `BarName` varchar(255) NOT NULL DEFAULT '' 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Frequents` (`DrinkerName`, `BarName`) VALUES 
    ('Emil', 'Deluxe'), 
    ('Max', 'Deluxe'), 
    ('Rebecca', 'Deluxe'), 
    ('Alex', 'Grace'), 
    ('Petra', 'Grace'), 
    ('Bam', 'KrogBar'), 
    ('Sam', 'KrogBar'); 

    CREATE TABLE `Likes` (
     `DrinkerName` varchar(255) NOT NULL DEFAULT '', 
     `BeerName` varchar(255) NOT NULL DEFAULT '' 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Likes` (`DrinkerName`, `BeerName`) VALUES 
    ('Bam', 'Carlsberg'), 
    ('Emil', 'Carlsberg'), 
    ('Rebecca', 'Carlsberg'), 
    ('Emil', 'Heiniken'), 
    ('Max', 'Heiniken'), 
    ('Petra', 'Heiniken'), 
    ('Sam', 'Heiniken'), 
    ('Alex', 'Miller'); 

    CREATE TABLE `Sells` (
     `BarName` varchar(100) DEFAULT NULL, 
     `BeerName` varchar(100) DEFAULT NULL, 
     `Amount` int(11) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Sells` (`BarName`, `BeerName`, `Amount`) VALUES 
    ('KrogBar', 'Miller', 3), 
    ('KrogBar', 'Carlsberg', 2), 
    ('KrogBar', 'Heiniken', 1), 
    ('Deluxe', 'Heiniken', 1); 

    CREATE TABLE `Serves` (
     `BarName` varchar(255) NOT NULL DEFAULT '', 
     `BeerName` varchar(255) NOT NULL DEFAULT '' 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    INSERT INTO `Serves` (`BarName`, `BeerName`) VALUES 
    ('Grace', 'Carlsberg'), 
    ('KrogBar', 'Carlsberg'), 
    ('Deluxe', 'Heiniken'), 
    ('Grace', 'Heiniken'), 
    ('KrogBar', 'Heiniken'), 
    ('KrogBar', 'Miller'); 

我想找到只光顧服務於啤酒,他們喜歡酒吧飲酒(假設每個飲酒者至少有一個酒吧)。 我該如何構建這樣的查詢?我知道我必須使用聯接和子查詢,我對他們中的任何一個都不陌生,但是我的所有實現都沒有取得正確的結果。

+0

其更好地包括樣本數據在您的文章 –

+0

請你使用MySQL或Oracle共享樣本數據和格式化文本(不是圖像) – zarruq

+0

所需輸出? – jarlh

回答

0

這是你在找什麼;

Select DISTINCT bar.Name,bar.Address,frequents.DrinkerName, likes.BeerName 
From 
Bar 
Join frequents on bar.Name = frequents.BarName 
join sells on bar.name = sells.BarName 
join likes on frequents.DrinkerName = likes.DrinkerName 

enter image description here

+0

這不回答僅有的部分 –