我在找到这个问题的解决方案时遇到了一些问题。我知道我的问题是不知道我的特定需求是如何在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子句,但它只返回我的红刀和绿刀,没有显示黄色和蓝色。
我很想避免使用子查询。
您怎么看?
答案 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
子句中的不是。