2011-02-17 12 views
2

テーブルから値を選択することは可能ですか?リストには存在しませんが、別のリストに存在するかどうか周り?mySQL:リストからどこのリストを選択するか

など。

SELECT COUNT(g.`property`) as `number`, g.`property` 
    FROM `foo` g 
WHERE `theID` IS IN (SELECT `theID` 
         FROM `tableofIDS` 
         WHERE `theID` = '54252') 
      AND NOT IN (SELECT `theID` 
         FROM `anotherTableofIDS` 
         WHERE `theID` = '54252') 

答えて

8
SELECT COUNT(g.`property`) as `number`, g.`property` 
FROM `foo` g 
WHERE `theID` IN (SELECT `theID` FROM `tableofIDS` WHERE `theID` = '54252') 
    AND `theID` NOT IN (SELECT `theID` FROM `anotherTableofIDS` WHERE `theID` = '54252') 
GROUP BY g.`property` 

AlternativlyにNOT INを変更し、あなたが使用できることは良く行われる加入:

SELECT COUNT(g.`property`) as `number`, g.`property` 
FROM `foo` g JOIN (
    SELECT `theID` 
    FROM `tableofIDS` 
    WHERE `theID` = '54252' 
    ) id1 ON g.theID = id1.theID 
    LEFT JOIN (
    SELECT `theID` 
    FROM `anotherTableofIDS` 
    WHERE `theID` = '54252' 
) id2 ON g.theID = id2.theID 
WHERE id2.theID IS NULL 
GROUP BY g.`property` 
+0

+1「join」アプローチは実際にはより良い方法です。それを含めるために私の答えを編集しようとしていた。 – fancyPants

+0

@WiseDonkey - これらの回答の両方にGROUP BY句があることに注意してください.MySQLは、初心者の質問作成者に、必要な句を作成しないことで、不快感を与えます。他のすべてのデータベースがGROUP BY句を必要とするため、GROUP BY句の作成に慣れてください。 – Leslie

+0

@leslie実際にOPのクエリは、列と集計関数を持つクエリがあり、グループを持たないときにMySqlエラーが出るので、「GROUP列を持たないGROUPの混合は不正です。bla bla bla'」というエラーをスローします。 –

0

2つの構文エラーが検出されたとは思えませんでした。

SELECT COUNT(g.`property`) as `number`, g.`property` FROM `foo` g WHERE `theID` IN (SELECT `theID` FROM `tableofIDS` WHERE `theID` = '54252') AND `theID` NOT EXISTS (SELECT `theID` FROM `anotherTableofIDS` WHERE `theID` = '54252') 

編集をお試しください:NOT EXISTS

0

は、私はあなたが探しているものだけであるかもしれないと思いますこれは:

 
    SELECT COUNT(g.property) as `number`, 
      g.property 
     FROM foo g 
     JOIN tableofIDs i USING (theID) 
RIGHT JOIN anothertableofIDs x USING (theID) 
    WHERE g.theID = '54252' 
     AND x.theID IS NULL 
    GROUP BY g.property 
関連する問題