私はMySQLを使用しており、クエリがあります。サブクエリもあります。MySQLとサブクエリをより効率的に作成する
SELECT * FROM rg, list, status
WHERE (
(rg.required_status_id IS NULL AND rg.incorrect_status_id IS NULL) ||
(status.season_id = rg.required_status_id AND status.user_id = list.user_id) ||
(rg.incorrect_status_id IS NOT NULL AND
list.user_id NOT IN (SELECT user_id FROM status WHERE user_id = list.user_id AND season_id = rg.incorrect_status_id)
)
)
問題は、次のコードの一部です:
(rg.incorrect_status_id IS NOT NULL AND
list.user_id NOT IN (SELECT user_id FROM status WHERE user_id = list.user_id AND season_id = rg.incorrect_status_id)
)
表「ステータスが」user_id
がlist.user_id
と同じであるとseason_id
がrg.incorrect_status_id
と同じである行を持っている場合、私がチェックできる方法は?
更新
は、ここに私の現在のコードですが、それはまったく動作しません。私は何をすべきかわかりません。
SELECT * FROM rg, list, status
LEFT JOIN status AS stat
INNER JOIN rg AS rglist
ON rglist.incorrect_status_id = stat.season_id
ON stat.season_id = rglist.incorrect_status_id
WHERE (
(rg.required_status_id IS NULL AND rg.incorrect_status_id IS NULL) ||
(status.season_id = rg.required_status_id AND status.user_id = list.user_id) ||
(rg.incorrect_status_id IS NOT NULL AND stat.user_id IS NULL)
)
)
アップデート2
私は名前を変更しますが、基本的な考え方は同じです。
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 kayttajien_ilmoittautumiset.kayttaja_id = sarjojen_kilpailukausien_pelaajastatukset.kayttaja_id
さて、これは言う:見つからない
コラム:中1054不明な列 'sarjojen_rglistat.vaadittu_pelaajastatus_idを' '句に'
だから、なぜでしょうか?
「sarjojen_rglistat」という表があり、「vaadittu_pelaajastatus_id」という列があります。
MySQLは 'OR'を非常にうまく最適化しません。クエリを条件ごとに別々のクエリに分割し、それらを 'UNION'と組み合わせてみてください。 – Barmar
最初のケースでは、すべての 'list'と' status'行の完全な積で 'NULL'の行が結合されることを理解していますか? – Barmar
他のクエリと一致しない行を検索する3番目のクエリを書くより良い方法については、http://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1を参照してください。表。 – Barmar