そのため、SSMS(SQL Server Management Studio)で同様のクエリを試行する場合にも問題があるように見えますが、MSAccessが厄介であるという問題が再び発生しているようです。
次のように大まかに定義されたテーブルのコレクションがあります。
- テーブルwidget_mfg{id(int)、name(nvarchar)}
- テーブルウィジェット{id(int)、name(nvarchar)、mfg_id(int)}
- テーブルwidget_component{id(int)、name(nvarchar)、widget_id(int)、component_id}
- テーブルコンポーネント{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
これは何も表示しません。サブクエリについて読んでいましたが、それらがどのように機能するのか、または現在のアプリケーションにどのように適用されるのかわかりません。
これに関する支援は有益です。
余談ですが、私は一般的にMSAccessとSQLのどちらもあまり得意ではありません。私は基本を知っていますが、それ以上のことはあまりありません。
編集:
このコードを試したところ、すべてのcomponent.idを取得しながら、それぞれ1つのエントリに制限することができます。この結果を使用して、最初の部分のIDを使用してこのデータを選択する残りのすべてのコンポーネントデータ(component。*)のリストを取得するにはどうすればよいですか?
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を学んでいます。)