У меня есть 3 таблицы:SQL SELECT из трех таблиц с требованиями
Игрок:
- playernumber
- имя
- инициалы
- date_of_birth
- пол
Fine:
-
Номер платежа
- playernumber
- Дата
- количество
Committee_member:
- playernumber
- start_date
- end_date
- функция
Так выход я хотел бы получить бы; имя, инициалы, сумма. Но я только хочу видеть игроков с штрафом, которые также являются членами комитета. Я попытался это:
SELECT name, initials, amount
FROM Player
JOIN Fine on Player.playernumber = Fine.playernumber
JOIN Committee_member on Player.playernumber = Comittee_member.playernumber
Который дает мне все члены, которые имеют штраф и также являются членами комитета, но это дает мне двойной выход, который не является правильным. Кто-нибудь знает, что я могу сделать, поэтому я не получаю двойные результаты?
Благодаря людям на этом сайте я узнал, что WHERE EXISTS (...)
может решить мою проблему:
SELECT name, initials, amount
FROM Player
JOIN Fine on Player.playernumber = Fine.playernumber
WHERE EXISTS (SELECT *
FROM Committee_member
WHERE Player.playernumber = Comittee_member.playernumber)
Дополнительной вещь, которую вы могли бы сделать, это подсчитать количество штрафов каждый член комиссии имеет по:
SELECT name, initials, COUNT(amount) as 'amount'
FROM Player
JOIN Fine on Player.playernumber = Fine.playernumber
WHERE Player.playernumber IN (SELECT playernumber from Committee_member)
GROUP BY name, initials
Ну - это вполне может быть правильным, если ваши данные говорит. Мы не можем видеть ваши данные, поэтому трудно сказать. Но, похоже, вам не нужно вступать в Комитет. Вы не используете данные ни для чего? –
@ AllanS.Hansen Мне бы хотелось только увидеть членов комитета, у которых есть штраф, поэтому мне это нужно. –
Вместо того чтобы присоединиться к Comittee_member, вы можете использовать 'WHERE EXISTS (SELECT * FROM Comittee_member c где c.playernumber = p.playernumber)' – maraca