因此,我似乎再次遇到了 MS Access 过于挑剔的问题,尽管在 SSMS (SQL Server Management Studio) 中尝试类似查询时似乎也是一个问题。
我有一组表,大致定义如下:
- 表 widget_mfg { id (int), name (nvarchar) }
- 表小部件 { id (int), name (nvarchar), mfg_id (int) }
- 表 widget_component { id (int), name (nvarchar), widget_id (int), component_id }
- table component { id (int), name (nvarchar), ... } -- 这个表有 ~25 列
我想做的是查询数据库并获取特定制造商使用的所有组件的列表。我已经尝试了其中一些查询:
SELECT c.*, wc.widget_id, w.mfg_id
FROM ((widget_component wc INNER JOIN widget w ON wc.widget_id = w.id)
INNER JOIN widget_manufacturer wm on w.mfg_id = wm.id)
INNER JOIN component c on c.id = wc.component_id
WHERE wm.id = 1
前面的示例显示了包含在不同小部件的多个 widget_component 列表中的任何部分的副本。
我也试过这样做:
SELECT DISTINCT c.id, c.name, wc.widget_id, w.mfg_id
FROM component c, widget_component wc, widget w, widget_manufacturer wm
WHERE wm.id=w.mfg_id AND wm.id = 1
这根本不显示任何东西。我正在阅读有关子查询的信息,但我不明白它们是如何工作的,也不明白它们将如何应用于我当前的应用程序。
在这方面的任何帮助都是有益的。
顺便说一句,总的来说,我对 MS Access 或 SQL 都不是很好。我知道基础知识,但除此之外没有太多。
编辑:
我刚刚尝试了这段代码,它可以获取所有component.id,同时将它们限制为一个条目。如何使用此结果获取所有其余组件数据(component.*)的列表,其中第一部分的 id 用于选择此数据?
SELECT DISTINCT c.part_no
FROM component c, widget w, widget_component wc, widget_manufacturer wm
WHERE(((c.id=wc.component_id AND wc.widget_id=w.id AND w.mfg_id=wm.id AND wm.id=1)))
(PS 这可能不是最好的方法,但我仍在学习 SQL。)