我有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
)
))
现在它没有返回任何结果。我怎么能解决这个问题?
答案 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
尝试以上代码。
希望这会对你有所帮助。