因此,我似乎再次对MSA Access的缺陷有疑问,尽管在SSMS(SQL服务器管理工作室)尝试类似查询时,这似乎也是一个问题。
我有一套表格,大致定义如下:
- table widget_mfg { id (int), name (nvarchar) }
- table widget { id (int), name (nvarchar), mfg_id (int) }
- table widget_component { id (int), name (nvarchar), widget_id (int), component_id }
- table component { id (int), name (nvarchar), ... } -- There are ~25 columns in this table
我想做的是查询数据库,并获得一个特定制造商使用的所有部件的清单。
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
上一个示例显示不同部件的多个元件_ 元件列表中包含的任何部件的复制件 。
我也尝试过做:
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一般都不太擅长。 我知道基本知识,但除了这些,我还不知道很多。
编辑 :
我刚刚尝试了这个代码, 它的工作是将全部组件. id s 都限制在单个条目内。 我该如何使用它的结果来获取一份所有组件数据( part. *) 的列表, 其中第一部分的 id s 用于选择此数据?
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)))
(P.S.,这也许不是这样做的最佳方法,但我仍在学习SQL.)