【问题标题】: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
相关资源
最近更新 更多