2017-02-13 17 views
-1

小売業者と呼ばれるテーブルがあります。そのフィールドは、私は私はおそらくで選択をしたいフィールドを持つ在庫MySQLのユニークな列の結合を選択します。

retail location id, 
project id, 
inventory number, 
amount. 

と呼ばれる別のテーブルを持って、私はフィールドを持つプロジェクト

project id, 
project name, 
state id, 
target release date. 

と呼ばれる別のテーブルを持っている

retail location ID, 
retail location name, 
address, 
phone number. 

です左の結合私は思う(非常に非常に新しいSQL)は、特定の小売場所、ヘンリーダウンタウンの場所でのみ利用可能なプロジェクトのプロジェクト名を取得します。

私は小売店舗の場所テーブルに複数の店舗を持ち、私の小売店舗のすべての店舗は小売店舗の店舗IDによって在庫表で参照されています。 henry downtownの場所で販売されているプロジェクト名はすべて入手できますが、他の小売店では販売されていないものだけを入手する方法がわかりません。 Plsは私が別個のは、実際にかかわらず、私のために何かをやっているかわからない現在、私は

SELECT DISTINCT `Project`.`Name` 
FROM `Retail Sellers` 
LEFT JOIN `testDatabase`.`Inventory` ON `Retail Sellers`.`Retail Location ID` = `Inventory`.`Retail Location ID` 
LEFT JOIN `testDatabase`.`Project` ON `Inventory`.`Project ID` = `Project`.`Project ID` 
WHERE (`Retail Sellers`.`Retail Location Name`='Henry Downtown') 
ORDER BY `Project`.`Name` ASC 

を持って助けます。現在のところ、2つしかなければならない場合は4行を返します。助けてくれてありがとう、すべての助けを感謝します。私はPHPMyAdminを使用しています。

答えて

0

最初に、名前を使用する場合は、左結合は必要ありません。

あなたの質問に対する答えは、group byhavingです。あなたがSQLを学んでいるなら、実際にはselect distinctを学ぶ理由はありません。ほとんどすべてのことができる、group byより良いことができます。だから、

SELECT p.Name 
FROM `Retail Sellers` rs JOIN 
    `testDatabase`.`Inventory` i 
    ON rs.`Retail Location ID` = i.`Retail Location ID` JOIN 
    `testDatabase`.`Project` p 
    ON i.`Project ID` = p.`Project ID` WHERE rs.`Retail Location Name` = 'Henry Downtown' 
GROUP BY p.Name 
HAVING MIN(p.`Retail Location Name`) = MAX(p.`Retail Location Name`) AND -- there is only one name 
     MIN(p.`Retail Location Name`) = 'Henry Downtown' 
ORDER BY `Project`.`Name` ASC 
関連する問題