我正在寻找解决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命令会这样做。
我将不胜感激为此找到解决方案的任何帮助或提示。 谢谢!
答案 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 JOIN
和INNER JOIN
部分进行额外的包围,但请先尝试一下,如果它不起作用,请告诉我