我有一个问题,我找到了一个相当长的解决方案,我不认为这是一个好习惯。 但是我觉得必须有一种语法可以立即解决这个问题而不会有太多复杂性。 我已经几次碰到这个问题了,我想一劳永逸地知道。
我有一个名为" T_STOP_LOSS"的表,其中我有三列" LIVES_FROM"," LIVES_TO"和" SL_VALUE" (所有数字类型+包含具有自动编号类型的ID的列)。 我想检索包含SL_VALUE的记录,其中变量值位于LIVES_FROM和LIVES_TO之间的间隔。
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相关。
上述陈述永远不会奏效,因为表格&#39; NR_LIVES&#39;包含一个ID字段作为主键,用于链接到T_STOP_LOSS表。
(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语句按照我期望的方式工作(返回包含SL为正确的间隔)。
我希望我的问题很明确。如果没有,请不要犹豫。
答案 0 :(得分:1)
在我看来,你想要做一些简单的连接查询。首先查看这些参考文献here和here,以便您更熟悉该方法。
其次,通常没有理由在子表中添加额外的“查找”列,因为可以从适当的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 ;
答案 1 :(得分:0)
感谢Nicolas,我找到了我需要的东西。
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