【问题标题】:SQL Select With Multiple AndSQL 选择多个与
【发布时间】:2011-04-13 17:22:15
【问题描述】:

我有一个很长的 sql 语句,我正在尝试添加一些 AND 条件,但它不起作用。

这是我的声明:

if($cat=="att") { $sqlCatC = "INNER JOIN yt_att_data CAT
    ON CAT.busID = R.id AND CAT.subcatID = 5 AND CAT.subcatID = 136 AND CAT.deleted = 0"; }

//Get RegionInfo busID based on region, approved
    $sql= "SELECT DISTINCT CAT.busID,R.id,companyName,membershipID,addressID,city,logo,descriptionShort FROM yt_Business_RegInfo R
    $sqlReg
    INNER JOIN yt_Business_Seasons S
    ON R.id = S.busID AND S.deleted = 0
    INNER JOIN yt_Business_Address A
    ON R.addressID = A.id
    INNER JOIN yt_Business_Membership M
    ON R.membershipID = M.id AND M.approved = 1
    $sqlCatC
    WHERE R.deleted = 0
    ORDER BY R.companyName ASC LIMIT $start, $limit";

我试图在顶部的 $sqlCatC 中添加 CAT.subcatID 等于 5 和 136 的 AND 条件。它适用于检查单个 CAT.subcatID 但不适用于两个。任何建议将不胜感激。

【问题讨论】:

  • 对于单个行,CAT.subcatID 不能同时是 5136。您需要OR 还是在寻找relational division(在这种情况下您需要ORGROUP BYHAVING)?
  • 怎么不工作?你有错误吗?还是错误的结果?如果是这样,结果如何错误?我怀疑你可能想要一个 OR 而不是 AND。
  • 如果我使用 OR 那么它只显示选择的 subcatID 5 或 136 的记录。我需要它来显示同时选择的公司记录。它基本上是一个公司记录,它已检查了某些标准,如果这两个都被检查,我需要显示它。
  • 在这种情况下,除了使用OR(或IN)之外,您还需要GROUP BYHAVING COUNT(DISTINCT subcatID)=2
  • @Martin - 谢谢。这是我尝试过的,但我得到了一个 mysql 错误。 'INNER JOIN yt_att_data CAT ON CAT.busID = R.id AND CAT.deleted = '0' AND CAT.subcatID IN(5,136) GROUP BY CAT.subcatID HAVING COUNT(DISTINCT CAT.subcatID)=2'

标签: mysql sql select where


【解决方案1】:

像这样使用IN 关键字:

CAT.subcatID IN(5,136)

替换你的两个 AND。

【讨论】:

  • @Paul 感谢您的编辑 :) 我也在做同样的事情,并意识到答案已经被编辑了。
【解决方案2】:

subcatID 不能同时为 5 和 136,您必须使用 OR 而不是 AND。

改成试试

ON CAT.busID = R.id AND 
(CAT.subcatID = 5 OR CAT.subcatID = 136) 
AND CAT.deleted = 0";

或者你可以使用 IN 来缩短它

 ON CAT.busID = R.id AND 
 CAT.subcatID IN ('5','136') 
    AND CAT.deleted = 0";

【讨论】:

    【解决方案3】:

    当您将同一列等同于两个不同的值时,您不能应用 AND 条件。 使用 OR 条件。

    将 $sqlCatC 更改为如下:

    $sqlCatC = "INNER JOIN yt_att_data CAT  ON CAT.busID = R.id AND (CAT.subcatID = 5 OR CAT.subcatID = 136) AND CAT.deleted = 0";
    

    【讨论】:

    • 问题是我只想在两个 subcatID 都在我的表中时显示记录。 subcatID 是基于公司记录的标准。例如 DB 表如下所示: id busID subcatID, 8000 - 845 - 5, 8001 - 845 - 136
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 2014-02-11
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2011-02-01
    相关资源
    最近更新 更多