ジョインがサブクエリよりも効率的で、クエリが非常に遅く、多くのサブクエリが使用されるため、それを改善するが、方法を知らない。同じテーブル内の別のレコードを調べるときにSQLサブクエリをジョインに変換するアクセス2010
私は以下の表を持っている:
People \\this table stores lists of individual people with the following fields
(
ID, \\Primary Key
aacode Text, \\represents a individual house
PERSNO number, \\represent the number of the person in the house e.g. person number 1
HRP number, \\the PERSNO of the Housing Reference Person (HRP) the "main" person in the house
DVHsize number, \\the number of people in the house
R01 number, \\the persons relationship to the person who is PERSNO=1
R02 number, \\the persons relationship to the person who is PERSNO=2
R03 number, \\the persons relationship to the person who is PERSNO=3
AgeCat text, \\the age range of the person e.g. 30-44
xMarSta number, \\representing the marital satus of the person
)
Relatives \\this table stores the possible R01 numbers and their text equivalents
(
ID Primary Key, \\all possible R01 values
Relationship text, \\meaning of the corisponding R01 values
)
xMarSta \\this table store the possible xMarSta values and their text equivalents
(
ID Primary Key \\all possible xMarSta values
Marital text, \\meaning of corresponding R01 values
)
クエリは次のとおりです。
HsHld
- このクエリの目標は、各家のために作成することである(すなわち、各aacode)に家を記述したテキスト刺しますフォーム[Marital][AgeCat][Relationship][AgeCat][Relationship][AgeCat]
などだから、3人の家のための出力がMarried(30-44)Spouse(30-44)Child(1-4)
のように見えるかもしれません私はHsHldのための私の現在のコードはひどいですが、それは以下に含まれている知っている:
SELECT People.ID, People.aacode, People.PERSNO,
People.HRP, People.DVHsize, xMarSta.Marital,
[Marital] & " (" & [AgeCat] & ")" & [RAL2] & [RAge2] &
[RAL3] & [RAge3] & [RAL4] & [RAge4] & [RAL5] & [RAge5] &
[RAL6] & [RAge6] & [RAL7] & [RAge7] & [RAL8] & [RAge8] AS HsTyp,
(SELECT Fam2.R01 FROM People AS Fam2 WHERE Fam2.aacode = People.aacode
AND Fam2.PERSNO = 2) AS Rel2,
(SELECT Fam3.R01 FROM People AS Fam3 WHERE Fam3.aacode = People.aacode
AND Fam3.PERSNO = 3) AS Rel3,
Switch([Rel2] Is Null,Null,[Rel2]=-9,'DNA',[Rel2]=-8,'NoAns',
[Rel2]=1,'Spouse',[Rel2]=2,'Cohabitee',[Rel2]<7,'Child',
[Rel2]<10,'Parent',[Rel2]<15,'Sibling',[Rel2]=15,'Grandchild',
[Rel2]=16,'Grandparent',[Rel2]=17,'OtherRelative',
[Rel2]=20,'CivilPartner',True,'Other') AS RAL2,
Switch([Rel3] Is Null,Null,[Rel3]=-9,'DNA',[Rel3]=-8,'NoAns',
[Rel3]=1,'Spouse',[Rel3]=2,'Cohabitee',[Rel3]<7,'Child',
[Rel3]<10,'Parent',[Rel3]<15,'Sibling',[Rel3]=15,'Grandchild',
[Rel3]=16,'Grandparent',[Rel3]=17,'OtherRelative',
[Rel3]=20,'CivilPartner',True,'Other') AS RAL3,
(Select FAge2.AgeCat FROM People AS FAge2
WHERE FAge2.aacode = People.aacode
AND FAge2.PERSNO = 2
) AS RAge2,
(Select FAge3.AgeCat FROM People AS FAge3
WHERE FAge3.aacode = People.aacode AND FAge3.PERSNO = 3
) AS RAge3
FROM Relatives
RIGHT JOIN (xMarSta RIGHT JOIN People ON xMarSta.ID=People.xMarSta)
ON Relatives.ID=People.R01
WHERE (((People.HRP)=[People.PERSNO]))
ORDER BY People.aacode;
変更する必要があるいくつかの重要なものがあります。現時点で
- 私は テーブルが動作するように親戚に相対分野からの参加を得ることができないので、私は より良い方法がなければならないRALと呼ばれるスイッチ機能を使用しています。
- 投稿を簡単にするため、Rel2 & Rel3などしか含まれていませんが、実際のコードではRel13になります!したがって、パフォーマンスの問題はさらに悪化します。
- これらのサブクエリを結合で置き換えたいのですが、サブクエリ が同じテーブル内の別のレコードを調べると、これについてはわかりません。
- 私は非常にこれで私の深さの外に、私は少しSQLを知っていますが、この問題の 複雑さは、自己がエイリアスで行われ、それにテーブルを結合
ああ、ちょうどノート、あなたが重複質問を開くべきではありません、編集の質問のideiaは、あなたの最初の質問は、あなたは明らかでなかった場合ということですより多くの情報を編集して提供することができます。今は3つの重複した質問があります。他のものを複写して閉じてこれにリンクすることを検討してください。 –