MySQL和子查询不返回任何结果

时间:2017-06-22 11:16:18

标签: mysql sql

我有MySQL数据库和SQL查询,但尚未100%清理,但这不是最大的问题。主要问题是子查询无法正常工作。请参阅下文。

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

问题是我的代码的以下部分。它应该在两种情况下返回一行:

1)如果sarjojen_kilpailukausien_pelaajastatukset = sarjojen_rglistat.vaadittu_pelaajastatus_id

2)sarjojen_kilpailukausien_pelaajastatukset = sarjojen_rglistat.epakelpo_pelaajastatus_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
    )
  ))

现在它没有返回任何结果。我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:1)

那么skk.sarjan_kilpailukausi_id = sr.vaadittu_pelaajastatus_id还是NOT EXISTS (SELECT * FROM skp WHERE skp.kayttaja_id = ki.kayttaja_id)?好的,我在以下查询中应用了这个条件。

我正在使用表别名来使它更加可辐射。我也重写了你的联接。请检查一下。

SELECT
  sr.montako_huonointa_pois_lkm AS ei_huomioitavat_kilpailut_lkm
  , sr.montako_suora_nousu_lkm AS montako_suora_nousu_lkm
  , sr.montako_suora_pudotus_lkm AS montako_suora_pudotus_lkm
  , sr.montako_nousukarsinta_lkm AS montako_nousukarsinta_lkm
  , sr.montako_pudotuskarsinta_lkm AS montako_pudotuskarsinta_lkm
  , sr.vaadittu_pelaajastatus_id AS vaadittu_pelaajastatus_id
  , sr.epakelpo_pelaajastatus_id AS epakelpo_pelaajastatus_id
  , sro.monesko_kilpailu AS monesko_kilpailu
  , sro.sarakeotsikko AS kilpailu_sarakeotsikko
  , sor.kayttaja_id AS kayttaja_id
  , sor.pistemaara AS pisteet
  , sor.kompensaatiopistemaara AS kompensaatiopisteet
  , kk.id AS kilpailu_id
  , kk.ajankohta_alkamispaiva AS kilpailu_alkamispaiva
  , kk.kilpailunimi_virallinen AS kilpailu_nimi
  , ki.pelaaja_oma_nimi_txt AS kayttaja_nimiteksti
  , ki.pelaaja_oma_seura_lyh_txt AS kayttaja_seurateksti
  , ki.pelaaja_oma_kunta_txt AS kayttaja_kuntateksti
  , sk.kausi_id AS kausi_id
FROM sarjojen_rglistat sr
JOIN sarjojen_rglistojen_osakilpailut sro ON sro.rglista_id = sr.id
JOIN kilpailukausien_kilpailut kk ON  kk.id = sro.kilpailu_id
                                  AND kk.kausi_id IS NULL
                                  AND kk.seura_id IS NULL
JOIN sarjojen_osakilpailuiden_rgpisteet sor ON sor.kilpailu_id = kk.id
JOIN sarjojen_kilpailukausien_kilpailusysteemit skk 
                ON skk.id = kk.kauden_kilpailusysteemi_id
JOIN sarjojen_kilpailukaudet sk ON sk.id = skk.sarjan_kilpailukausi_id
LEFT JOIN sarjojen_kilpailukausien_pelaajastatukset skp
                ON  skp.sarjan_kilpailukausi_id = sr.vaadittu_pelaajastatus_id
                AND skp.kayttaja_id  = sor.kayttaja_id
LEFT JOIN kayttajien_ilmoittautumiset ki ON  ki.kayttaja_id = sor.kayttaja_id
                                         AND ki.kilpailu_id = sor.kilpailu_id
WHERE sr.id = 4
AND 
(
  (
    sr.vaadittu_pelaajastatus_id IS NULL 
    AND 
    sr.epakelpo_pelaajastatus_id IS NULL
  ) 
  OR 
  (
    skp.sarjan_kilpailukausi_id = sr.vaadittu_pelaajastatus_id 
    AND 
    skp.kayttaja_id = ki.kayttaja_id
  )
  OR
  (
    skk.sarjan_kilpailukausi_id = sr.vaadittu_pelaajastatus_id
    OR 
    NOT EXISTS 
    (
      SELECT *
      FROM skp
      WHERE skp.kayttaja_id = ki.kayttaja_id
    )
  )
)
ORDER BY sk.kausi_id ASC, kk.ajankohta_alkamispaiva ASC, kk.id ASC;

答案 1 :(得分:0)

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 sarjojen_rglistat.epakelpo_pelaajastatus_id NOT IN(              <!-------I had made changes to this line
        SELECT  sarjojen_rglistat.epakelpo_pelaajastatus_id
        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

<强> or

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
    JOIN sarjojen_rglistojen_osakilpailut
    JOIN kilpailukausien_kilpailut
    JOIN sarjojen_osakilpailuiden_rgpisteet
    JOIN sarjojen_kilpailukaudet
    JOIN 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 sarjojen_rglistat.epakelpo_pelaajastatus_id NOT IN(
                                                                    SELECT  sarjojen_rglistat.epakelpo_pelaajastatus_id
                                                                    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

尝试以上代码。

希望这会对你有所帮助。