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