2011-06-17 31 views
5

第一クエリMYSQLで別のクエリの結果からクエリ結果を減算する方法

(SELECT a.cat_id, 
      a.cat_name, 
      a.cat_description, 
      b.subcat_name, 
      b.subcat_description 
    FROM trade_categories a 
LEFT JOIN trade_subcategories b ON a.cat_id = b.cat_id 
    WHERE a.cat_name LIKE '%catty%' 
     OR a.cat_description LIKE '%catty%') 
UNION 
    (SELECT c.cat_id, 
      d.cat_name, 
      d.cat_description, 
      c.subcat_name, 
      c.subcat_description 
    FROM trade_subcategories c 
LEFT JOIN trade_categories d ON c.cat_id = d.cat_id 
    WHERE c.subcat_name LIKE '%catty%' 
     OR c.subcat_description LIKE '%catty%') 

第二のクエリ:

SELECT x.cat_id, 
     x.cat_name, 
     x.cat_description, 
     y.subcat_name, 
     y.subcat_description 
FROM trade_categories x 
    JOIN trade_subcategories y ON x.cat_id = y.cat_id 
WHERE ( x.cat_name LIKE '%catty%' 
     OR x.cat_description LIKE '%catty%') 
    AND ( y.subcat_name NOT LIKE '%catty%' 
     OR y.subcat_description NOT LIKE '%catty%') 

は、私が第一クエリ結果から2番目のクエリ結果を減算したいです。

+2

について質問しますか? –

+0

私は試しましたが、sytaxエラーを表示します – merlin

+0

(1query)MINUS(2番目のクエリ) – merlin

答えて

11

http://www.bitbybit.dk/carsten/blog/?p=71

または 例:

SELECT Name FROM employee1 WHERE name NOT IN (SELECT name FROM employee2); 
+1

このリンクをクリックすると、禁止された403が表示されます.... このサーバーの/carsten/blog/index.phpにアクセスする権限がありません さらに、試行中に403禁止されたエラーが発生しました – JzInqXc9Dg

1

は、私はあなたがいずれかのNOT INまたはLEFT JOINを行うことができると思います。私はLEFT JOINを好むだろう。ですから、例えば

、QUERY_ONEとQUERY_TWOがあなたの2つのクエリ

+0

私はこれを試してみる返答ありがとうございました – merlin

+0

別のテーブルにデータを保存せずに...これには他の解決策があります...これらの2つの条件クエリ? – merlin

0
SELECT a.cat_id, 
      a.cat_name, 
      a.cat_description, 
      b.subcat_name, 
      b.subcat_description 
    FROM trade_categories a 
LEFT JOIN trade_subcategories b ON a.cat_id = b.cat_id 
    WHERE a.cat_name NOT LIKE '%catty%' 
     AND a.cat_description NOT LIKE '%catty%' 
     AND (b.cat_id IS NULL 
     OR b.subcat_name NOT LIKE '%catty%' AND b.subcat_description NOT LIKE '%catty%') 

Orの別名である

SELECT `QUERY_ONE`.* 
FROM `QUERY_ONE` 
LEFT JOIN `QUERY_TWO` USING (`cat_id`) 
WHERE QUERY_TWO.cat_id IS NULL; 

、2つのクエリの結果は、(一時的な)テーブルに格納されている場合は、それらの上に@Abhayのソリューションを使用することができます。

+0

okkありがとう。私は試してみてください... – merlin

関連する問題