2011-04-13 60 views
0

我有一个很长的SQL语句,我试图添加一些AND条件,但它不工作。SQL选择多个和

这里是我的发言:

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条件下它的工作原理与检查一单个CAT.subcatID但不是两个。任何建议,将不胜感激。

+0

对于单个行'CAT.subcatID'不能同时是'5'和'136'。你需要'OR'吗?还是你正在寻找[关系部门](http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational- (在这种情况下,你需要'OR','GROUP BY'和'HAVING')? – 2011-04-13 17:25:15

+0

它不起作用?你有错误吗?还是错误的结果?如果是这样,结果如何?我怀疑你可能想要一个OR而不是AND。 – driis 2011-04-13 17:25:53

+0

如果我使用OR,那么它只会显示具有所选子代码5或136的记录。我需要它显示已选择的公司记录。这基本上是一个公司记录,有一定的标准检查,如果这两个都被检查,我需要显示它。 – Paul 2011-04-13 18:23:44

回答

0

当您将同一列等同于两个不同的值时,不能应用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"; 
+0

问题是我只想记录显示,如果两个subcatIDs在我的表中。子分类标识是基于公司记录的标准。例如,数据库表看起来像这样:id busID subcatID,8000 - 845 - 5,8001 - 845 - 136 – Paul 2011-04-13 18:32:05

1

的subcatID不能在5至136,你必须使用或代替和时间。

其更改并尝试

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"; 
2

使用IN关键字这样做:

CAT.subcatID IN(5,136) 

更换你的两个与运算。

+0

@Paul感谢您的编辑:)我也这样做,并意识到答案已被编辑。 – reggie 2011-04-13 17:33:02