多表数据的MySQL查询
我想,我正在MySQL中寻找一个听起来不太复杂的问题的解决方案 基本上我想用两张桌子。 第一个包含一个电子组件列表,如多表数据的MySQL查询,mysql,Mysql,我想,我正在MySQL中寻找一个听起来不太复杂的问题的解决方案 基本上我想用两张桌子。 第一个包含一个电子组件列表,如 ID Description Value AdditonalInfo 1 Resistor 1.0R R0402 2 Capacitor 100nF C0805 3 Capacitor 10nF C0603 ... 我想将有关采购的信息存储在第二个表中 ID Component Manufacturer Partnum
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命令是否会这样做
我将感谢任何帮助或提示,以找到解决这个问题的方法。
谢谢 请您尝试以下方法:
SELECT * FROM table1 LEFT JOIN table2 on table1.id = table2.id
如果组件列上有索引,则可以使用带联接的查询获取数据:
SELECT
*
FROM components
INNER JOIN store USING(id)
这个查询足够了,您不需要存储冗余数据。下面的查询应该会给出您想要的信息 它获取所有
组件
,然后针对每个组件显示子查询中与寻源
表匹配的条目,该表按最新条目对组件进行分组
子查询基于组件和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
您可能需要在
左联接
和内部联接
部分周围添加括号,但请先尝试一下,如果不起作用请告诉我我可以在一个查询中生成此表,但性能可能不太好。可以吗?如果是这样,请添加您的DML和DDL查询。OUTER JOIN
plusgroupby
componentHAVING Timestamp=max(Timestamp)
对于左JOIN,它可以部分工作。但是,如果一个组件有多个制造商条目,我将为该组件获取多行。如果是这样的话,我只想用最新的制造商条目为每个组件获取一行。@Timoklingberg您能解释一下什么部分不工作,以及您没有看到哪些结果是您期望看到的吗?这将有助于理解答案中可能出现的错误是的,谢谢。如果在查询的第二行中用c.*替换b.Manufacturer和b.Partnumber,这似乎可以正常工作。