1

かなり長い解決策を見つけた質問がありますが、それは良い習慣ではないと思います。ただし、あまり複雑にすることなく、この問題をすぐに解決できる構文が必要だと思います。私はすでにこの問題に何度か遭遇しました、そして私は一度だけ知りたいです。

「T_STOP_LOSS」というテーブルがあり、「LIVES_FROM」、「LIVES_TO」、「SL_VALUE」の3つの列があります(すべての数値タイプ+ AutoNumberタイプのIDを含む列)。変数値がLIVES_FROMとLIVES_TOの間の間隔にあるSL_VALUEを含むレコードを取得したいと思います。

ID  LIVES_FROM   LIVES_TO   NR_COUNTRIES_FROM   NR_COUNTRIES_TO SL_VALUE
1   0   999 2   2   39,3
12  0   999 3   3   34,6
23  0   999 4   4   29,6
34  0   999 5   9   25,7
45  0   999 10  100 22,17
46  1000    1499    2   2   31,1
2   1000    1499    3   3   27,4
13  1000    1499    4   4   23,3
24  1000    1499    5   9   20,4
35  1000    1499    10  100 17,5
36  1500    1999    2   2   23,6
47  1500    1999    3   3   20,7
3   1500    1999    4   4   17,7
14  1500    1999    5   9   15,4
25  1500    1999    10  100 13,3
26  2000    2999    2   2   23,6
37  2000    2999    3   3   20,7
48  2000    2999    4   4   17,7
4   2000    2999    5   9   15,4
15  2000    2999    10  100 13,3

通常、私は以下を使用します:

lNr_Lives = <Something> '(Retrieved via Textbox)
sSQL_Select = "SELECT SLVALUE FROM T_STOP_LOSS WHERE LIVES_FROM <= " & LNr_Lives & " AND LIVES_TO >= " & LNr_Lives & ";"

ただし、LIVES_FROMとLIVES_TOは、外部キーを介してテーブルNR_LIVESに関連付けられています。
テーブル'NR_LIVES'には、T_STOP_LOSSテーブルへのリンクに使用されるプライマリキーとしてIDフィールドが含まれているため、上記のステートメントは機能しません。(NR_LIVESの列の名前はID、NR_LIVES_FROM、およびNR_LIVES_TOです(重要ではありません))。

ID  NR_LIVES_FROM   NR_LIVES_TO
1   0   999
2   1000    1499
3   1500    1999
4   2000    2999

NR_LIVESテーブルに格納されているLIVES_FROMとLIVES_TOの実際の値にアクセスし、SELECTステートメントを期待どおりに機能させるための最も簡単な方法を教えてください(正しい間隔)。

私の質問が明確であることを願っています。そうでない場合は、遠慮なく言及してください。

4

2 に答える 2

1

いくつかの単純な結合クエリを実行したいように私には見えます。まず、ここここでこれらのリファレンスをチェックして、アプローチをよりよく理解してください。

次に、これらの値は適切なJOINクエリからアクセスできるため、通常、子テーブルに追加の「ルックアップ」列を含める理由はありません。

あなたが探しているクエリは次のとおりだと思います。

SELECT SLVALUE FROM
T_STOP_LOSS
INNER JOIN
NR_LIVES 
ON T_STOP_LOSS.ID=NR_LIVES.ID
WHERE 
NR_LIVES_FROM <=  LNr_Lives  
AND 
NR_LIVES_TO >= LNr_Lives ;
于 2012-07-06T16:06:07.847 に答える
0

ニコラスのおかげで、私は必要なものを見つけました。

Dim cQueries                    As clsQueries
Dim oRst                        As DAO.Recordset
Dim sSQL_Select                 As String
Dim LNr_Lives                   As Long
Dim iNr_Countries               As Integer
Dim i As Integer


If Not IsNull(Me.txt_Nr_Lives) Then
    LNr_Lives = Me.txt_Nr_Lives
Else
    MsgBox "No number of lives defined!", vbCritical
    Exit Sub
End If

If Not IsNull(Me.cbb_Nr_Countries) Then
    iNr_Countries = Me.cbb_Nr_Countries
Else
    MsgBox "No number of countries defined!", vbCritical
    Exit Sub
End If

Set cQueries = New clsQueries
sSQL_Select = "SELECT " & _
                    "* " & _
                "FROM " & _
                    "T_STOP_LOSS " & _
                "INNER JOIN " & _
                    "NR_LIVES ON (T_STOP_LOSS.LIVES_FROM = NR_LIVES.ID) " & _
                " WHERE " & _
                    "NR_LIVES.NR_LIVES_FROM <= " & LNr_Lives & _
                " AND " & _
                    "NR_LIVES.NR_LIVES_TO >= " & LNr_Lives & _
                " AND " & _
                    "T_STOP_LOSS.NR_COUNTRIES_FROM <= " & iNr_Countries & _
                " AND " & _
                    "T_STOP_LOSS.NR_COUNTRIES_TO >= " & iNr_Countries & ";"

Set oRst = cQueries.Select_Statement(sSQL_Select)
oRst.MoveFirst

Do While Not oRst.EOF
    Me.txt_FSL = oRst![SL_VALUE]
    oRst.MoveNext
Loop
于 2012-07-09T09:14:49.833 に答える