【问题标题】:how do I pull multiple items out of a table with one join?如何通过一个联接将多个项目从表中拉出?
【发布时间】:2013-11-29 02:18:20
【问题描述】:

我有一个连接,我希望它通过在项目 ID 上为两个不同的项目 ID 连接项目表来收集两个项目的名称。例如:

SELECT first_item_name, second_item_name FROM items JOIN order_table ON ...

这就是我卡住的地方 - 我实际上需要做的是在一个表上进行两个连接,第一个选择第一个项目的名称:

ON first_item_id = first_id

然后返回并选择第二个项目的名称与另一个连接:

ON second_item_id = second_id

我的问题是这可以在单个连接中完成吗?

谢谢。

【问题讨论】:

  • 你能给出你的桌子的结构吗?

标签: mysql sql join


【解决方案1】:

一句话;没有。

要记住的是,

On value = value

对于连接创建的每个元组(将元组视为有效记录,但由连接创建的记录),子句必须评估为 TRUE。因此,如果 tableA.col1 = tableB.col1 对于第一个元组为真,那么它不能 同时 对于第二个元组的 tableA.col1 = tableB.col1 也为真。这是皱纹;在这两种情况下 tableA.col1 = tableB.col1 但仅针对每个元组单独,以您要求的方式,我可以同时拥有 tuple1 和 tuple2。

不要担心多次加入同一个表。这没有错,本身不会导致性能不佳或出于任何其他需要避免的原因。

【讨论】:

  • 您可以创建一个 mysql 函数来执行此操作,例如 GetItemName(ItemID)。我不同意它不会导致性能问题。如果您多次加入同一个大表,性能将会下降。
  • “本质上不会导致性能不佳” 任何连接,实际上是任何语句,都有导致性能不佳的风险。将表连接到自身没有固有风险。多个连接、无索引连接、连接 2 个大型数据集等通常会导致性能不佳。不是它是给定表的多重连接的具体事实。
  • 您的陈述在逻辑上是正确的,但语义没有帮助。 “经常导致”与“不是固有地”是一个合乎逻辑的观点,但是虽然我喜欢这类讨论,但它对 OP 没有帮助。另一方面,SQL 是一种非常迂腐的语言,所以也许它确实有助于他们开始这样思考。
猜你喜欢
  • 1970-01-01
  • 2015-03-11
  • 2015-10-29
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多