-1

mysql に問題があります。それを行う方法が見つかりません。おそらく mysql の適切なキーワードがわかりません。

mysql5

+------------+------------+----------+
| | ID | フォーリンキー | トレーナー |
+------------+------------+----------+
| | ... | ... | ... |
| | 475 | 254 | ヌル |
| | 476 | 254 | ヌル |
| | 477 | 254 | ヌル |
| | 478 | 286 | ヌル |
| | 479 | 286 | 無料 |
| | 480 | 286 | 無料 |
| | 481 | 401 | 無料 |
| | 482 | 401 | 1 |
| | 483 | 401 | 無料 |
| | 484 | 405 | ヌル |
| | 485 | 405 | 1 |
| | 486 | 405 | 5 |
| | 487 | 405 | 無料 |
| | 488 | 406 | 1 |
| | 489 | 406 | 5 |
| | 490 | 406 | 5 |
| | 491 | 406 | 2 |
| | ... | ... | ... |
+------------+------------+----------+

期待される結果

制約 :

すべてのトレーナーが NULL または FREE (少なくとも 1 ですが、2 つ以上の場合もあります) ではないすべての外部キー ID を取得したいのですが、少なくとも 1 つが NULL である必要があります。

+------------+-------+
| | ID_TR | フィールド | フィールド |
+------------+-------+
| | 405 | .. |
+------------+-------+

私はmysqlでそれを行う方法を知りませんか? グループの場合、1 人のトレーナーがいる == 無料または NULL ?

私を助けてくれてありがとう

4

3 に答える 3

1

EXISTSこれは、オペレーターの典型的なユースケースのように思えます。

SELECT *
FROM   mytable a
WHERE  EXISTS (SELECT 1
               FROM   mytable b
               WHERE  a.foreignkey = b.foreignkey 
               AND    trainer IS NOT NULL 
               AND    trainer <> 'FREE'

編集:明確な異なるs
だけが必要な場合:foreignkey

SELECT DISTINCT foreignkey
FROM   mytable a
WHERE  EXISTS (SELECT 1
               FROM   mytable b
               WHERE  a.foreignkey = b.foreignkey 
               AND    trainer IS NOT NULL 
               AND    trainer <> 'FREE'
于 2014-01-26T12:53:30.357 に答える
0
SELECT   t.*
FROM     my_table    t
    JOIN cross_table x ON x.FOREIGNKEY = t.ID_TR
WHERE    x.TRAINER IS NOT NULL
     AND x.TRAINER <> 'FREE'
GROUP BY t.ID_TR
于 2014-01-26T12:52:09.617 に答える
0

数を数えてから'FREE'ロジックNULLを実行できます。

select foreignkey,
       sum(trainer is null) as NumNulls,
       sum(trainer = 'Free') as NumFrees,
       count(*) as Num
from table t
group by foreignkey

次に、having 句を追加して、必要なものを取得します。これが何を意味するのか正確にはわかりません。

たとえば、これはあなたが望むものかもしれません:

having NumNulls > 0 and NumFrees > 0

またはおそらくこれ:

having NumNulls > 0 and NumFrees > 0 and cnt >= 2;
于 2014-01-26T13:27:47.243 に答える