SQLクエリを作成しましたが、期待した結果が得られません。私はsqlステートメントへの私のステップが何であったかを説明しようとします。
まず、IN()節で使用する副選択があります。
SELECT GROUP_CONCAT(job_id SEPARATOR ',') as job_ids
FROM candidate_job
WHERE candidate_id = 1111
GROUP BY candidate_id
結果は1,7,37,38,39,135,136であり、それはまさに私が期待していることです。次に、これらの連結された数値を外側のsqlステートメントで使用します。
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job
WHERE job_id IN (1,7,37,38,39,135,136)
これは私に139,539,1686,1759を与え、これはまさに私が期待するものでもあります。
ここで両方のクエリを組み合わせます。最初のクエリは、2番目のクエリのIN()句の副選択です。
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job
WHERE job_id IN (
SELECT GROUP_CONCAT(job_id SEPARATOR ',') as job_ids
FROM candidate_job
WHERE candidate_id = 1111
GROUP BY candidate_id
)
結果は139,539にすぎず、なぜ139,539,1686,1759になるべきではないのか理解できません。
なぜこれが当てはまるのか誰かが考えを持っていますか?IN()でGROUP_CONCAT()列を使用することはそれほど珍しいことではありませんよね?
group_concat()
カンマ区切りの文字列を提供します。これを演算子のオペランドとして渡しても、期待どおりにin
は動作しません(完全に一致するものを検索することになります)。
私はお勧めしexists
ます:
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job uj
WHERE EXISTS (
SELECT 1
FROM candidate_job cj
WHERE cj.candidate_id = 1111 AND uj.job_id = cj.job_id
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加