问题
i have trouble with mysql, i dont find the way to do it maybe i dont know the good mysql keyword
mysql5
+----------+------------+----------+ | ID | FOREIGNKEY | TRAINER | +----------+------------+----------+ | ... | ... | ... | | 475 | 254 | NULL | | 476 | 254 | NULL | | 477 | 254 | NULL | | 478 | 286 | NULL | | 479 | 286 | FREE | | 480 | 286 | FREE | | 481 | 401 | FREE | | 482 | 401 | 1 | | 483 | 401 | FREE | | 484 | 405 | NULL | | 485 | 405 | 1 | | 486 | 405 | 5 | | 487 | 405 | FREE | | 488 | 406 | 1 | | 489 | 406 | 5 | | 490 | 406 | 5 | | 491 | 406 | 2 | | ... | ... | ... | +----------+------------+----------+
Expected result
Constraint :
i would like to get all the foreignkey id that have not all trainer NULL or FREE (at least 1 but can be 2 or more) but at least one should be NULL
+------------+-------+ | ID_TR | FIELD | +------------+-------+ | 405 | .. | +------------+-------+
i dont know how to do it in mysql ? Group then HAVING one trainer == FREE OR NULL ?
thanks for helping me
回答1:
This sounds like a classic usecase for the EXISTS
operator:
SELECT *
FROM mytable a
WHERE EXISTS (SELECT 1
FROM mytable b
WHERE a.foreignkey = b.foreignkey
AND trainer IS NOT NULL
AND trainer <> 'FREE'
EDIT:
If you just just want the distinct different foreignkey
s:
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'
回答2:
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
回答3:
You can count the number that are 'FREE'
and NULL
and then do logic:
select foreignkey,
sum(trainer is null) as NumNulls,
sum(trainer = 'Free') as NumFrees,
count(*) as Num
from table t
group by foreignkey
You then want to add a having clause to get what you want. I am not sure exactly what this means: "i would like to get all the foreignkey id that have not all trainer NULL or FREE (at least 1 but can be 2 or more) but at least one should be NULL".
For instance, this might be what you want:
having NumNulls > 0 and NumFrees > 0
or perhaps this:
having NumNulls > 0 and NumFrees > 0 and cnt >= 2;
来源:https://stackoverflow.com/questions/21363523/mysql-how-to-find-if-at-least-one-row-from-cross-reference-table-is-null-or-crit