J'ai une base de données MySQL et une requête SQL qui n'est pas encore complètement nettoyée, mais ce n'est pas le plus gros problème. Le problème principal est une sous-requête qui ne fonctionne pas comme je le souhaite. S'il vous plaît voir ci-dessous.MySQL et la sous-requête ne donne aucun résultat
SELECT
sarjojen_rglistat.montako_huonointa_pois_lkm AS ei_huomioitavat_kilpailut_lkm
, sarjojen_rglistat.montako_suora_nousu_lkm AS montako_suora_nousu_lkm
, sarjojen_rglistat.montako_suora_pudotus_lkm AS montako_suora_pudotus_lkm
, sarjojen_rglistat.montako_nousukarsinta_lkm AS montako_nousukarsinta_lkm
, sarjojen_rglistat.montako_pudotuskarsinta_lkm AS montako_pudotuskarsinta_lkm
, sarjojen_rglistat.vaadittu_pelaajastatus_id AS vaadittu_pelaajastatus_id
, sarjojen_rglistat.epakelpo_pelaajastatus_id AS epakelpo_pelaajastatus_id
, sarjojen_rglistojen_osakilpailut.monesko_kilpailu AS monesko_kilpailu
, sarjojen_rglistojen_osakilpailut.sarakeotsikko AS kilpailu_sarakeotsikko
, sarjojen_osakilpailuiden_rgpisteet.kayttaja_id AS kayttaja_id
, sarjojen_osakilpailuiden_rgpisteet.pistemaara AS pisteet
, sarjojen_osakilpailuiden_rgpisteet.kompensaatiopistemaara AS kompensaatiopisteet
, kilpailukausien_kilpailut.id AS kilpailu_id
, kilpailukausien_kilpailut.ajankohta_alkamispaiva AS kilpailu_alkamispaiva
, kilpailukausien_kilpailut.kilpailunimi_virallinen AS kilpailu_nimi
, kayttajien_ilmoittautumiset.pelaaja_oma_nimi_txt AS kayttaja_nimiteksti
, kayttajien_ilmoittautumiset.pelaaja_oma_seura_lyh_txt AS kayttaja_seurateksti
, kayttajien_ilmoittautumiset.pelaaja_oma_kunta_txt AS kayttaja_kuntateksti
, sarjojen_kilpailukaudet.kausi_id AS kausi_id
FROM (sarjojen_rglistat
, sarjojen_rglistojen_osakilpailut
, kilpailukausien_kilpailut
, sarjojen_osakilpailuiden_rgpisteet
, sarjojen_kilpailukaudet
, sarjojen_kilpailukausien_kilpailusysteemit)
/* , kayttajien_ilmoittautumiset */
/* , sarjojen_kilpailukausien_pelaajastatukset */
LEFT OUTER JOIN sarjojen_kilpailukausien_pelaajastatukset
ON (sarjojen_kilpailukausien_pelaajastatukset.sarjan_kilpailukausi_id = sarjojen_rglistat.vaadittu_pelaajastatus_id)
LEFT OUTER JOIN kayttajien_ilmoittautumiset
ON (sarjojen_kilpailukausien_pelaajastatukset.kayttaja_id = kayttajien_ilmoittautumiset.kayttaja_id)
WHERE
sarjojen_rglistat.id = 4
AND sarjojen_rglistojen_osakilpailut.rglista_id = sarjojen_rglistat.id
AND sarjojen_rglistojen_osakilpailut.kilpailu_id = kilpailukausien_kilpailut.id
AND sarjojen_osakilpailuiden_rgpisteet.kilpailu_id = kilpailukausien_kilpailut.id
AND sarjojen_kilpailukausien_kilpailusysteemit.id = kilpailukausien_kilpailut.kauden_kilpailusysteemi_id
AND sarjojen_kilpailukausien_kilpailusysteemit.sarjan_kilpailukausi_id = sarjojen_kilpailukaudet.id
AND kayttajien_ilmoittautumiset.kayttaja_id = sarjojen_osakilpailuiden_rgpisteet.kayttaja_id
AND kayttajien_ilmoittautumiset.kilpailu_id = sarjojen_osakilpailuiden_rgpisteet.kilpailu_id
AND kilpailukausien_kilpailut.kausi_id IS NULL
AND kilpailukausien_kilpailut.seura_id IS NULL
AND ((sarjojen_rglistat.vaadittu_pelaajastatus_id IS NULL AND sarjojen_rglistat.epakelpo_pelaajastatus_id IS NULL) ||
(sarjojen_kilpailukausien_pelaajastatukset.sarjan_kilpailukausi_id = sarjojen_rglistat.vaadittu_pelaajastatus_id AND sarjojen_kilpailukausien_pelaajastatukset.kayttaja_id = kayttajien_ilmoittautumiset.kayttaja_id) ||
(sarjojen_rglistat.epakelpo_pelaajastatus_id IS NOT NULL
AND NOT EXISTS (
SELECT *
FROM sarjojen_kilpailukausien_pelaajastatukset
WHERE kayttaja_id = kayttajien_ilmoittautumiset.kayttaja_id
AND sarjan_kilpailukausi_id = sarjojen_rglistat.epakelpo_pelaajastatus_id
)
))
ORDER BY sarjojen_kilpailukaudet.kausi_id ASC, kilpailukausien_kilpailut.ajankohta_alkamispaiva ASC, kilpailukausien_kilpailut.id ASC
Le problème est la partie suivante de mon code. Elle doit retourner une ligne dans deux cas:
1) si sarjojen_kilpailukausien_pelaajastatukset = sarjojen_rglistat.vaadittu_pelaajastatus_id
ou
2) sarjojen_kilpailukausien_pelaajastatukset = sarjojen_rglistat.epakelpo_pelaajastatus_id
n'existe pas.
(sarjojen_rglistat.epakelpo_pelaajastatus_id IS NOT NULL
AND NOT EXISTS (
SELECT *
FROM sarjojen_kilpailukausien_pelaajastatukset
WHERE kayttaja_id = kayttajien_ilmoittautumiset.kayttaja_id
AND sarjan_kilpailukausi_id = sarjojen_rglistat.epakelpo_pelaajastatus_id
)
))
Il ne renvoie aucun résultat. Comment pourrais-je résoudre le problème?
* Ne jamais utiliser les virgules dans la clause 'FROM'. * Toujours * utiliser une syntaxe 'JOIN' correcte et explicite. –
@GordonLinoff Pourriez-vous me montrer comment le faire? – xms
@xms: Vous savez déjà comment le faire. Pour les jointures externes, vous l'utilisez déjà ("LEFT OUTER JOIN ... ON", mais pour les jointures internes ("INNER JOIN ... ON") –