2012-10-13 16 views
1

如何正确使用这个INOR select语句? (其实一切除了where bdt.active='yes'作品)如何在MySQL中使用关键字IN OR内联3个表?

SELECT bdt.*, specials.*, stars.* 
FROM bdt INNER JOIN specials ON bdt.id = specials.id 
     INNER JOIN stars ON specials.id=stars.id 
    WHERE bdt.active='yes' 
    AND bdt.business_type IN ('entertainment') 
    OR bdt.business_subtype IN ('entertainment') 
    OR bdt.subtype2 IN ('entertainment') 
    OR specials.type IN ('entertainment') 

回答

1

你只需要使用第二AND条件括号()这样的:大约风格

SELECT bdt.*, specials.*, stars.* 
FROM bdt INNER JOIN specials ON bdt.id = specials.id 
     INNER JOIN stars ON specials.id=stars.id 
    WHERE bdt.active='yes' 
    AND (bdt.business_type IN ('entertainment') 
    OR bdt.business_subtype IN ('entertainment') 
    OR bdt.subtype2 IN ('entertainment') 
    OR specials.type IN ('entertainment')) 
+0

schwiing!我从来不知道()谢谢你! – carm

+0

实际上都没有工作。我应该透露我有一个子查询附加到此查询,停止工作时,我应用修复程序。非常感谢您的帮助,谢谢。 ('''')和特殊类型IN('娱乐')特殊选项。(bdt.id = specials.id WHERE bdt.active ='yes'和specials.date> = CURDATE()和specials.type IN('entertainment')和bdt.id =“。$ row_entertainment ['id']”。 GROUP BY specials.title ORDER BY specials.date,specials.price ASC LIMIT 7“; – carm

0

2注。

  1. 使用IN当你有多个选择,使用=单个直接匹配。
  2. SELECT bdt.*, specials.*, stars.*是非常糟糕的形式。从你的加入,很明显每个表都有一个id字段。你只想列出你需要的列和别名相同的列。

我还会在下面显示如何使用IN正确地重写OR子句。

SELECT bdt.*, specials.*, stars.* 
FROM bdt INNER JOIN specials ON bdt.id = specials.id 
     INNER JOIN stars ON specials.id=stars.id 
    WHERE bdt.active='yes' 
    AND 'entertainment' IN (bdt.business_type, bdt.business_subtype, 
          bdt.subtype2, specials.type) 
+0

也适用,但如果有变量列表,您将如何编写它 SELECT bdt。*,specials。*,stars。* FROM bdt INNER JOIN特惠ON bdt.id = specials.id INNER JOIN stars on specials.id = stars.id WHERE bdt.active ='yes' AND(bdt.business_type IN('entertainment','bars', '夜总会') 或bdt.business_subtype IN('entertainment','bars','nightclubs') 或bdt.subtype2 IN('entertainment','bars','nightclubs') 或specials.type IN('娱乐”, '酒吧', '夜总会')) – carm

相关问题