1

我将如何IN OR正确使用此 select 语句?(一切实际上都有效,除了where bdt.active='yes'

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')
4

2 回答 2

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'))
于 2012-10-13T04:32:47.250 回答
0

2 关于风格的注意事项。

  1. IN当您有多个选择时使用,=用于单个直接匹配。
  2. SELECT bdt.*, specials.*, stars.*真是糟糕的形式。从您的联接中,很明显每个表都有一个id字段。您将只想列出您需要的列,并以不同的方式对同名列进行别名。

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

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)
于 2012-10-13T05:37:56.377 回答