MySQL选择具有唯一列的连接

时间:2017-02-13 00:20:27

标签: mysql sql join phpmyadmin

我有一张名为零售商的桌子。它的领域是

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

我有另一个名为带有字段

的项目的表
project id,
project name, 
state id, 
target release date. 

我有另一个名为inventory的表,其中包含字段

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

我想做一个可能左连接的选择我认为(非常非常新的sql)获得项目的项目名称,这些项目仅在特定的零售地点,亨利市中心位置可用。

我的零售地点表中有多个地点,我的所有零售地点都通过其零售地点ID在库存表中引用。我可以在henry downtown位置获得所有项目名称,但我不确定如何获得仅在那里销售而不在其他零售点销售的项目名称。请帮助目前我有

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

我不确定区别是否真的为我做了什么。当应该只有两行时,它当前返回4行。感谢您的帮助,感谢所有帮助。我正在使用PHPMyAdmin。

1 个答案:

答案 0 :(得分: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