【问题标题】:MySQL query to JOIN tables based on column valuesMySQL 根据列值查询 JOIN 表
【发布时间】:2013-07-17 18:04:53
【问题描述】:

我有两张桌子。一种带有部件号、硬件名称和类型,另一种带有硬件的位置,还具有包含硬件的特定箱的位置。这些垃圾箱没有特定的编号,但有唯一的名称。第二个表还包含硬件和 bin 的位置,这些位置可能会随着时间而改变。我正在尝试创建一个 MySQL 查询,它将数据组合到一个新表中,该表将作为逗号分隔的文件输出。

表 1 内容

Part Number | Name          | Type
------------+---------------+---------------
0           | None          | Not Applicable
25          | name1         | type1
150         | name2         | type2

表 2 内容

Date     | Bin  |  Part Number | Event    | To Location | From Location
---------+------+--------------+----------+-------------+---------------
1/1/2013 | bin1 |  0           | arrive   | location1   | none
1/2/2013 | none |  25          | arrive   | location2   | none
1/2/2013 | none |  150         | relocate | location3   | location2

查询的最终输出应该类似于:

Date     | Bin  | Part Number | Part Name | Type           | Event    | To Location | From Location
---------+------+-------------+-----------+----------------+----------+-------------+--------------
1/1/2013 | bin1 | 0           | None      | Not Applicable | arrive   | location1   | none
1/2/2013 | none | 25          | name1     | type1          | arrive   | location2   | none
1/2/2013 | none | 150         | name2     | type2          | relocate | location2   | location2

【问题讨论】:

  • 您不能在没有相关数据的情况下将两个表连接在一起。表 1 中的哪些内容与表 2 相关?有主ID吗? ID是相关信息吗?请说清楚。就逗号分隔的输出而言,这只能在使用 JOIN 查询然后使用 PHP 或 phpMyAdmin 输出之后完成。您需要定期使用还是只需要一次?
  • 相关数据是零件号。我们使用表 2 中的零件编号来表示机芯,因为它们都是唯一的,而零件名称不一定是唯一的。我们实际上是在获取输出并创建一个 .txt。
  • 抱歉,我一定是盯着表 2 中的零件号而错过了。你在查询上走了多远?您甚至尝试运行任何查询吗?还是您希望 SE 为您完成所有工作?你有什么问题?
  • 不用担心,它在几张桌子上就有很多信息。我已经成功地从表 2 中提取所有数据并将其放入 .txt 文件中,并在此处尝试了来自不同线程的多个查询,但无法将所需的信息输入到我需要的输出中。我最新的不返回任何内容是“SELECT table2.*, FROM table2 JOIN table1.name, table 1.type WHERE table 2.part number=table 1.part number;”。我对这种类型的工作非常陌生,并且在进行项目时正在学习,现在已经被困在查询上将近 2 天了,所以只是想获得一些帮助或指导。
  • 您的语法已关闭,请参阅下面的答案以了解正确的语法

标签: mysql join


【解决方案1】:

试试这个:

SELECT
  *
FROM
  `Table1`
  INNER JOIN `Table2` ON (`Table1`.`Part Number`=`Table2`.`Part Number`)

为了使查询更好,您需要定义所有要返回的列,而不是 *

【讨论】:

  • 一旦我按照我想要的顺序添加了列定义并且我还在查询中添加了一个 ORDER BY 以按日期顺序获取所有内容,这一切都很好。
  • 忘记包含代码。再次感谢你的帮助。最终的解决方案是; SELECT table2.date, table2.bin, table2.part number, table1.name, table1.type, table2.event, table2.final location, table2.from location FROM table1 INNER JOIN table2 ON table1.part number=table2.part number ORDER BY table2.date ASC;
  • 谢谢,如果它回答了您的问题,请标记为最佳答案。
【解决方案2】:

这个帮助可能已经满了

select Name, Type, t2.Date, t2.Bin, t2.Part Number, t2.Event, t2.To Location, t2.From Location
FROM table1
JOIN table2 as t2    ON (table1.Part Number=t2.Part Number);

概念

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

【讨论】:

  • 这返回了一个空白的 .txt,所以我不确定缺少什么,因为我复制并粘贴然后将所有名称更改为我的实际列名。
猜你喜欢
  • 2021-11-14
  • 2021-10-17
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2013-05-10
  • 2015-05-22
相关资源
最近更新 更多