【问题标题】:Modified version of a left Join左连接的修改版本
【发布时间】:2014-05-23 17:13:01
【问题描述】:

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

不管怎样,问题就在这里。

我有 2 张桌子:

表一是:

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- 给定查询中的工具(在本例中为刀),用数量填充连接。 如果该对象在该颜色中不可用,则留空。

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

我希望避免使用子查询。

你怎么看?

【问题讨论】:

  • item表的主键是什么?我希望它是 id,但你使用了 3 两次。
  • 似乎你应该有第三张桌子
  • 项目、颜色,然后是链接两者并存储数量的项目颜色。通过该设置,可以使用外部连接进行此查询。
  • 你应该使用内部连接

标签: mysql


【解决方案1】:

也许您应该显示您尝试过的内容,但这里有一个查询将返回您要求的结果:

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'

这里的关键是将'knife'放在连接条件中,不是WHERE子句中。

【讨论】:

  • +1 有同样的想法。您还可以设置一个变量,使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多