【问题标题】:SQL select statement with AND and OR operators issue带有 AND 和 OR 运算符的 SQL 选择语句发出
【发布时间】:2012-12-06 10:18:15
【问题描述】:

我正在使用 Classic ASP 从 SQL Server 2000 数据库中获取记录。这是我使用的代码。

ASP 代码:

<form name="search" method="post" onsubmit="return attention();">
<table width="60%" border="0" cellpadding="2" cellspacing="0" style="margin:0 auto">
<tr>
    <td colspan="2"><h1 style="color:#003399;">Search for Certificate of Analysis</h1></td>
</tr>
<tr>
    <td valign="bottom">Product number <sup style="color:#EE0000;font-size:1.3em">*</sup></td>
    <td valign="bottom">Lot number</td>
</tr>
<tr>
    <td width="30%" valign="top">
        <input type="text" name="input1" size="20"/>
    </td>
    <td valign="top">
        <input type="text" size="20" name="input2"/> 
        <input style="background-color:#ffffff;border:0px;cursor:pointer" size="10" type="submit" name="sub" value=">>" />
    </td>
</tr>

</table>
<%
    if request.Form("sub") <> "" then
    Dim fname, lname
    fname= request.Form("input1")
    lname= request.Form("input2")
    session("n") = fname & lname
    sql = "Select * from search where cat_no_batch_no LIKE '"&request.Form("input1")&"%' OR cat_no_batch_no='"&session("n")&"'"
    rs.open sql, con, 1, 2
    if rs.eof then

    response.write("Please provide a valid Cat No.")    

    else



            do while not rs.eof
        %>
            <table border="1" cellpadding="5" cellspacing="0" width="60%" style="margin:0 auto; border-collapse:collapse;border-color:#999999">
            <tr>
                <td width="50%"><%=rs("cat_no_batch_no")%></td>
                <td width="10%">Click to open <a target="_blank" href="http://localhost/search1/<%=rs("pdf_path")%>"><%=rs("cat_no_batch_no")%></a></td>
            </tr>
            </table>

        <%
            rs.movenext
            loop
        end if
    rs.close
    end if
%>
</form>

上面的 LIKE 语句按预期工作,并显示包含相似 Cat No. 的多条记录。 当我在第一个输入框中输入 Cat No 并在另一个输入框中输入 Lot Number 时,问题就出现了。我想要的输出应该只是显示一条记录,因为我给出了 Cat No. 和 Lot Number ,但它显示了多条记录。

我提供的图像更清晰。

  1. 在下图中,我已将 6106021 作为 产品编号,因此它显示了两个条目。

  2. 在这张图片中,我将 6106021 作为 产品编号 和 218111 作为批号,它显示了两个条目1. 这就是问题所在,它应该显示一个条目,因为批号是唯一的,而猫号可以相同。

【问题讨论】:

  • 试试AND 而不是OR..

标签: sql asp-classic vbscript sql-server-2000 ado


【解决方案1】:

把你的问题读给自己听,想想你在说什么:

您说“我希望的输出应该只是显示一条记录,因为我已经给出了 Cat No. 和 Lot Number”

但是在你的 SQL 中你写 where cat_no_batch_no LIKE '"&amp;request.Form("input1")&amp;"%' OR cat_no_batch_no='"&amp;session("n")&amp;"'

关键词是AND vs. OR

在您的脑海中,您认为这两个条件都必须为真,但您的查询却不然。如果您希望这两个条件都为真,那么您必须使用 AND 运算符。

Naoki 正在做某事 - 您将不得不根据指定的条件修改您的 SQL。

【讨论】:

  • 感谢您的回复,但仍然对如何实施感到困惑。
【解决方案2】:

我猜您可以编写两个单独的 SQL 查询,具体取决于是否提供了“批号”。 您的代码可能如下所示:

if lname = "" then
    sql = "Select * from search where cat_no_batch_no LIKE '"&request.Form("input1")&"%'" 
else
    sql = "Select * from search where cat_no_batch_no LIKE '"&session("n")&"%'"
end if

希望对你有帮助

【讨论】:

  • 不是我想要的,谢谢你的回复。仍在寻找解决方法。@naoki
猜你喜欢
  • 2011-04-04
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2019-02-10
相关资源
最近更新 更多