【问题标题】:MySQL: Subqueries for normalized databasesMySQL:规范化数据库的子查询
【发布时间】:2012-12-25 06:02:12
【问题描述】:

我在谷歌上花了很多时间搜索这个,也登陆过几次 Stackoverflow,但我不知道如何满足我的需求。

这对你们大多数人来说可能很容易,但我就是无法让它发挥作用。

假设我有这张桌子:

item_data

还有一个:

vendor_data

我想要的是一个查询,我从第一个表中选择一个项目,并且该查询应该用第二个表中指定的相应名称替换 vendor_id - 当然仅用于我的输出。

我认为逻辑很简单,但我无法创建正确的查询。

喜欢: 我从表 item_data 中选择 id 为 2 的项目,然后我得到了在 item_data 中也指定的 vendor_id,这个 vendor_id正在 vendor_data -> vendor_id (3) 中查找正确的 vendor_name (CompanyZ) 作为我的结果。

非常感谢您的帮助,谢谢!

  • 安迪

【问题讨论】:

  • 规范化表的好处是您可以在查询结果中“非规范化” - 一个适当规范化的结构,您在其中选择多个连接应该产生与select * from unnormalized_table 相同的结果。所以只需在其中添加一些连接,例如select ... from item_data left join vendor_data on ...,您可以在结果中找到您的供应商。

标签: php mysql database subquery normalization


【解决方案1】:

听起来你只是想要一个简单的加入

SELECT i.item_id, i.item_name, v.vendor_id, v.vendor_name <-- select whatever fields you need here
FROM item_data AS i
INNER JOIN vendor_data AS v ON i.vendor_id = v.vendor.id
WHERE i.item_id = ?  <-- specify item_id for lookup here

【讨论】:

  • 谢谢!但是哪一部分返回 vendor_name 呢? (在我的示例 CompanyZ 中)
  • @AndyTanner v.vendor_name 将是保存您想要的数据的字段。如果这是您想要的唯一字段,则可以从 SELECT 子句中删除其他字段。
  • 哦,我只是重复了错误的行。迈克,非常感谢你,现在我明白它是如何工作的了!
猜你喜欢
  • 2011-10-07
  • 2011-12-16
  • 2013-07-17
  • 1970-01-01
  • 2011-11-15
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多