2012-10-13 17 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

相關問題