选择不同的内部联接,包括空参数

时间:2016-02-01 20:56:24

标签: mysql

我有一个表类别

它有一列 CategoryName

  
      
  1.   
  2. 平面
  3.   
  4.   

我有另一张名为品牌

的表格

它有一列 RelatedCategory

  
      
  1. 法拉利 - 1
  2.   
  3. learjet - 2
  4.   
  5. 未分类 - null
  6.   
  7. audi - 1
  8.   

我想生成一个独特的品牌列表(null和非null RelatedCategory),但使用CategoryName作为列表。

select distinct RelatedCategory from brand inner join category on Brand.RelatedCategory=Category.CategoryID

我希望该列表是品牌类别

  
      
  1.   
  2.   
  3. 非分类
  4.   

我该怎么做?获得独特的品牌类别以及未分类的品牌

2 个答案:

答案 0 :(得分:2)

你可以使用LEFT JOIN,它会给你第一个表中第二个不存在的结果:

select distinct RelatedCategory from category left join brand on
 Brand.RelatedCategory=Category.CategoryID

答案 1 :(得分:1)

使用LEFT JOIN代替INNER JOIN。并使用IFNULL代替不存在的类别名称来使用品牌名称。

SELECT DISTINCT(IFNULL(c.CategoryName, b.name)) AS RelatedCategory
FROM Brand AS b
LEFT JOIN Category AS c ON b.RelatedCategory = c.categoryID

另一种选择是使用UNION

SELECT DISTINCT CategoryName
FROM Brand AS b
JOIN Category AS c ON b.RelatedCategory = c.categoryID
WHERE RelatedCategory IS NOT NULL
UNION
SELECT DISTINCT Name
FROM Brand
WHERE RelatedCategory IS NULL