9

テーブルを考えるとfoo

Num   Letter
------------
1     A
1     B
1     B
2     C
3     A
3     C
3     D

私がそうするなら、SELECT * GROUP BY Num私はもちろんこのようなものを手に入れます:

Num   Letter
------------
1     A
2     C
3     A

これを改良したいのは次のとおりです。

Num   Has_No_Letter_C
---------------------
1     Yes
2     No
3     No

おそらく単純なSELECT IF ()プラス aがありORDER BYますが、今はわかりません...

私の実際の例では、結果のテーブルは別のテーブルに編集され、エントリLEFT JOINを拒否できるようにしたいが、他のテーブルに= 4 行がある場合は s を保持したい。NoNULLbarNum

4

2 に答える 2

19

SUM(condition)内で使用IF:

SELECT   Num,
         IF(SUM(Letter = 'C'), 'Yes', 'No') AS Has_Letter_C
FROM     my_table
GROUP BY Num

あなたは次のJOINようになります:

SELECT   another_table.Num
FROM     another_table LEFT JOIN my_table ON another_table.Num = my_table.Num
GROUP BY another_table.Num
HAVING   my_table.Num IS NULL OR SUM(my_table.Letter = 'C') > 0
于 2012-05-11T05:47:03.690 に答える
1

テーブルをLEFT JOINそれ自体にすると、対応する値があるかどうかを簡単に判断できます。

値「C」を考慮に入れると、これは仕事をします:

SELECT    t1.num, 
          IF(ISNULL(t2.num),"Yes","No") AS "Has_No_Letter_C"
FROM      yourtable AS t1
LEFT JOIN yourtable AS t2 ON t1.num=t2.num AND t2.`letter` = "C"
GROUP BY  num;
于 2012-05-11T05:46:30.157 に答える