如何使用VBscript比较一个表中的记录等于另一个表

时间:2016-09-27 08:26:57

标签: sql-server checkbox vbscript asp-classic

我的系统要求我使用VbScript

我的情况
我有2个表,名为CoverTypes(coverID,coverName数据)和InsuCover(用户选择CoverID和coverName数据)。

我想显示CoverTypes中的所有数据,如果数据也在insuCover表中,则复选框(已选中),如果没有相同的数据则取消选中

到目前为止我做的是

  • 我的查询

    coverTypes.Open“SELECT * FROM preregister.coverType”,conn,1

    insuCover.Open“SELECT * FROM insuCover where insuranceReqId ='”& insFireReqID&“'”,conn,1

要显示的代码

                                    <% Do While Not coverTypes.EOF%>
                                    <% if insuCover("coverId") = coverTypes("coverID") then%>
                                       <label id="coverID" name="coverNm"><%=coverTypes("coverNm")%></label>
                                       <input checked ="True" id="item_isSelected" name="item.isSelected" type="checkbox" value="<%=coverTypes("coverId")%>" /><br>
                                     <% else %>
                                       <label id="coverID" name="coverNm"><%=coverTypes("coverNm")%></label>
                                       <input id="item_isSelected" name="item.isSelected" type="checkbox" value="<%=coverTypes("coverId")%>" /><br>
                                    <% end if%>
                                <% coverTypes.MoveNext %>
                                <% Loop %>

问题是
目前只选择了一个复选框,因为我没有循环过度保护,但是当我循环2表并进行比较时,所有数据都会重复多次。

如何在CoverTypes中显示所有数据,如果数据也出现在insuCover表中,则复选框为true?

谢谢。

1 个答案:

答案 0 :(得分:0)

我仅使用您提供的两列创建了表,忽略了insuranceReqId列。

基本语句将使用coverID链接两个表,使用LEFT联接返回CoverTypes表中的所有值,并从不存在coverID的insuCover返回NULL。使用简单的CASE语句,我们可以测试数据是否存在于第二个表中,并输出合适的列,可以是1(已选中)或0(未选中),可用于确定UI上复选框的.checked状态。

SELECT p.coverID, p.coverName, CASE WHEN i.coverID IS NULL THEN 0 ELSE 1 END IsChecked, i.coverID, i.coverName
FROM preregister.coverType p
LEFT JOIN InsuCover i ON p.coverID = i.coverID

您可以忽略输出中的最后两列,因为它们只是用于直观地检查结果。