MySQL查询多个表数据

时间:2016-12-07 13:50:20

标签: mysql

我正在寻找解决MySQL内部问题的方法,这听起来并不太复杂,我想。

基本上我想使用两个表。 第一个包含电子元件列表,如

ID  Description  Value  AdditonalInfo
 1  Resistor     1.0R   R0402
 2  Capacitor    100nF  C0805
 3  Capacitor    10nF   C0603
 ...

我想在第二张表格中存储有关采购的信息。

ID  Component    Manufacturer Partnumber  Timestamp
 1  2            TDK          XXXYYYZZZ   5
 2  2            Kemet        AAABBBCCC   10
 3  1            Multicomp    111222333   3
 ...

如您所见,应该可以为每个组件添加多个制造商。

现在,我想生成一个应该包含的单个表(视图) 所有组件信息(如果有),是制造商的最新条目。

对于给定的示例

ID  Description  Value  AdditonalInfo Manufacturer Partnumber
 1  Resistor     1.0R   R0402         Multicomp    111222333
 2  Capacitor    100nF  C0805         Kemet        AAABBBCCC
 3  Capacitor    10nF   C0603         (NULL)

这可以在单个查询中实现吗?或者至少用某种查询 生成决赛桌?我无法找到,如果JOIN命令会这样做。

我将不胜感激为此找到解决方案的任何帮助或提示。 谢谢!

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT * FROM table1 LEFT JOIN table2 on table1.id = table2.id

答案 1 :(得分:0)

如果您在Component列上有索引,则可以使用JOIN查询获取数据:

SELECT 
* 
FROM components 
  INNER JOIN store USING(id)

此查询足够,您不需要存储冗余数据。

答案 2 :(得分:0)

以下查询应该可以为您提供所需信息。

它需要所有components,然后每个组件在子查询中显示匹配的条目,而sourcing表按最新条目对组件进行分组。

子查询基于组件和max(时间戳)连接到源表的另一个副本,以获取所需的剩余信息。

SELECT a.ID, a.Description, a.Value, a.AdditonalInfo, 
         c.Manufacturer, c.Partnumber
FROM componentTable a
LEFT JOIN ( SELECT component, max(timestamp) AS maxTime
            FROM sourcingTable
            GROUP BY component
       ) b
  ON  a.id = b.component
INNER JOIN sourcingTable c
  ON  b.component = c.component
  AND b.maxTime   = c.timestamp

您可能需要围绕LEFT JOININNER JOIN部分进行额外的包围,但请先尝试一下,如果它不起作用,请告诉我