左连接的修改版本

时间:2014-05-23 17:13:01

标签: mysql

我在找到这个问题的解决方案时遇到了一些问题。我知道我的问题是不知道我的特定需求是如何在mysql约定中命名的。

无论如何,这里有问题。

我有两张桌子:

表1是:

Color

id,name
1,red
2,blue
3,green
4,yellow

表2是:

Item

id,name,color_id,quantity
1,knife,1,10
2,fork,1,10
3,knife,3,10
4,hammer,4,10

现在我想执行一个返回我的查询:

1,red,knife,10
2,blue,null,null
3,green,knife,10
4,yellow,null,null

作为查询的描述我会说:

1-列出表1中的所有元素(仅一次)

2-给出查询中的工具(在本例中为刀),用数量填充连接。 如果该对象在该颜色中不可用,请保留null。

现在我尝试了一个简单的左连接,不幸的是还给了我黄色的锤子。 我尝试了一个左连接+ where子句,但它只返回我的红刀和绿刀,没有显示黄色和蓝色。

我很想避免使用子查询。

您怎么看?

1 个答案:

答案 0 :(得分:3)

也许您应该展示自己尝试过的内容,但这里的查询会返回您要求的结果:

SELECT c.id, c.name, i.name, i.quantity
FROM Color c
LEFT JOIN Item i
  ON i.color_id = c.id
  AND i.name = 'knife'

这里的关键是把刀子放在上面。在连接条件中,WHERE子句中的不是