Ms access SQL选择查询相关表

Ms access SQL选择查询相关表,ms-access,vba,Ms Access,Vba,我有一个问题,我找到了一个相当长的解决方案,我认为这不是一个好的做法。 然而,我觉得必须有一个可用的语法,能够立即解决这个问题,而不会有太多的复杂性。 我已经碰到过这个问题好几次了,我想永远知道 我有一个名为“T_STOP_LOSS”的表,其中有三列“lifes_FROM”、“lifes_TO”和“SL_VALUE”(所有数字类型+包含自动编号类型ID的列)。 我想检索包含SL_值的记录,其中变量值位于LIVES_FROM和LIVES_to之间的间隔 ID LIVES_FROM LIVES

我有一个问题,我找到了一个相当长的解决方案,我认为这不是一个好的做法。 然而,我觉得必须有一个可用的语法,能够立即解决这个问题,而不会有太多的复杂性。 我已经碰到过这个问题好几次了,我想永远知道

我有一个名为“T_STOP_LOSS”的表,其中有三列“lifes_FROM”、“lifes_TO”和“SL_VALUE”(所有数字类型+包含自动编号类型ID的列)。 我想检索包含SL_值的记录,其中变量值位于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 & ";"
请告诉我,你认为最简单的方法是从存储在NRLILL生命表中的LIFESESY和LIFESY到真正的值,得到我的SELECT语句以我预期的方式工作(返回包含SL的正确间隔的记录)。p>
我希望我的问题是清楚的。如果没有,请毫不犹豫地提及

在我看来,您需要执行一些简单的连接查询。首先查看这些参考资料,让您更熟悉该方法

其次,通常没有理由在子表中有额外的“Lookup”列,因为这些值可以从适当的联接查询访问

我怀疑您要查找的查询是:

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 ;
从中选择SLVALUE
止损
内连接
诺鲁的生活
在T_停止损失时。ID=NR_LIVES.ID
哪里
NR_寿命从=LNr_寿命;

在我看来,您需要执行一些简单的连接查询。首先查看这些参考资料,让您更熟悉该方法

其次,通常没有理由在子表中有额外的“Lookup”列,因为这些值可以从适当的联接查询访问

我怀疑您要查找的查询是:

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 ;
从中选择SLVALUE
止损
内连接
诺鲁的生活
在T_停止损失时。ID=NR_LIVES.ID
哪里
NR_寿命从=LNr_寿命;

多亏了尼古拉斯,我找到了我需要的东西

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
Dim cquerys作为clsQueries
将oRst设置为DAO。记录集
Dim sSQL_选择为字符串
黯淡的LNrê能活得一样长
Dim iNr_国家/地区为整数
作为整数的Dim i
如果不为空(Me.txt\u Nr\u Lives),则
LNr\u Lives=Me.txt\u Nr\u Lives
其他的
MsgBox“未定义生命数!”,vbCritical
出口接头
如果结束
如果不为空(Me.cbb\u Nr\u国家),则
iNr_国家=Me.cbb_Nr_国家
其他的
MsgBox“未定义国家数量!”,vbCritical
出口接头
如果结束
设置cquerys=新的clsQueries
sSQL_Select=“Select”&_
"* " & _
"来自"及_
“止损”和_
“内部连接”和_
“NR_继续生存(T_STOP_LOSS.lifes_FROM=NR_lifes.ID)”&_
"何处"及_
“NR_LIVES.NR_LIVES_FROM=“&LNr_LIVES&_
"及",_
“T_STOP_LOSS.NR_COUNTRIES_FROM=“&iNr_COUNTRIES&”
Set oRst=cQueries.Select语句(sSQL\U Select)
奥斯特先
不做就做
Me.txt_FSL=oRst![SL_值]
下一步
环

多亏了尼古拉斯,我找到了我需要的东西

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
Dim cquerys作为clsQueries
将oRst设置为DAO。记录集
Dim sSQL_选择为字符串
黯淡的LNrê能活得一样长
Dim iNr_国家/地区为整数
作为整数的Dim i
如果不为空(Me.txt\u Nr\u Lives),则
LNr\u Lives=Me.txt\u Nr\u Lives
其他的
MsgBox“未定义生命数!”,vbCritical
出口接头
如果结束
如果不为空(Me.cbb\u Nr\u国家),则
iNr_国家=Me.cbb_Nr_国家
其他的
MsgBox“未定义国家数量!”,vbCritical
出口接头
如果结束
设置cquerys=新的clsQueries
sSQL_Select=“Select”&_
"* " & _
"来自"及_
“止损”和_
“内部连接”和_
“NR_继续生存(T_STOP_LOSS.lifes_FROM=NR_lifes.ID)”&_
"何处"及_
“NR_LIVES.NR_LIVES_FROM=“&LNr_LIVES&_
"及",_
“T_STOP_LOSS.NR_COUNTRIES_FROM=“&iNr_COUNTRIES&”
Set oRst=cQueries.Select语句(sSQL\U Select)
奥斯特先
不做就做
Me.txt_FSL=oRst![SL_值]
下一步
环

请不要使用图片,从图片中复制问题是不可能的,但即使是格式最差的数据也可以剪切和粘贴。让我们澄清一下:T_STOP_LOSS.ID与NR_LIVES.ID有关吗?死亡和停止损失之间的区别是什么?它们是多余的字段吗?确切地说,您要匹配哪个值?样本数据发生了什么?T_STOP_LOSS.lifes_FROM通过lookupwizard链接到NR_lifes.lifes_FROM。您在T_STOP_LOSS表中看到的是NR_LIVES表中定义的值,但它实际上包含NR_LIVES表中的ID。对你的生命来说也是如此。由于这些间隔在未来可能会发生轻微变化,因此我这样做是为了在NR_寿命表中更改一次值,并且这些更改将在T_停止损失表中自动生效。图片不是一个好主意,样本数据是一个好主意。粘贴数据,而不是图片。谢谢。请不要使用图片,因为无法从图片复制问题,而即使格式最差的数据也可以剪切和粘贴。让我们澄清一下:T_STOP_LOSS.ID与NR_LIVES.ID有关吗?死亡和停止损失之间的区别是什么?它们是多余的字段吗?确切地说,您要匹配哪个值?样本数据发生了什么?T_STOP_LOSS.lifes_FROM通过lookupwizard链接到NR_lifes.lifes_FROM。您在T_STOP_LOSS表中看到的是NR_L中定义的值