我想從第三選擇(子查詢)表中的第一個選擇表中引用一個字段。 但是,該字段在進入查詢的子級別時無法識別。 我正在處理的php代碼使用sql返回將在其他地方使用的sql命令(字符串)的一部分。引用外部查詢/子查詢的最佳方法是什麼?
我想出了這個例子,它顯示了我想解決的那種嵌套查詢。 在這裏,我試圖讓名稱和在晚上工作,有一個可用的工作匹配工作等級用戶的電子郵件:
tables -----------> fields
table_users -> [user_id, name, email, rank, ...]
table_users_jobs -> [user_id, job_id, period, ....]
table_jobs -> [job_id, status, rank, ...]
-- sql calling code -> $rank = "t1.rank"; get_users_info_by_rank($rank);
-- maybe using: SET @rank = NULL; SELECT @rank := $rank, t1.name, ...
SELECT t1.name, t1.email
FROM table_users as t1
WHERE t1.user_id IN (
SELECT t2.user_id
FROM table_users_jobs as t2
WHERE t2.period = 'night' AND
t2.job_id IN (
-- avaiable jobs to that rank -> get_job_ranks_sql($rank);
SELECT t3.job_id
FROM table_jobs as t3
-- maybe using: t3.rank = @rank
WHERE t3.rank = t1.rank AND
t3.status = 'avaiable_position')
)
工作一點我想我能避開第三級選擇問題。然而問題是,我試圖重用的SQL代碼一樣,讓我說,我選擇了排名的JOB_ID功能:
function get_job_ranks_sql($rank){
//probably 't3' will be renamed for something more unique
return 'SELECT t3.job_id
FROM table_jobs as t3
WHERE t3.rank = '.$rank.' AND
t3.status = "available_position")';
}
即使使用PHP我試圖使它通用於可能如果可能,請使用其他語言。 使用SQL版本:MySQL 5.1.41
其實我認爲這是可能的方式我想,通過使用SQL 變量像@rank,但我不知道它的速度較慢,如果有其他更好的方法來做到這一點。
預先感謝任何幫助:)
你有使用內嵌視圖(嵌套選擇語句)的原因嗎?你可以用連接完成所有這些...... – Nate
這只是一個簡單的例子。通常情況下它會複雜得多,最終的sql是通過連接一些在中間返回sql的函數形成的,比如我在那裏放置的get_job_ranks_sql – Seeker