1
我不確定我說的是否正確,但這是我的困境。我繼承了一個應用程序,它需要查找與列表中每個聯繫人關聯的公司。它目前正在編寫的應用程序的方式查詢DB在以下方面:如何在子選擇中包含列表中的匹配項目?
SELECT c.name
FROM company c
WHERE c.id = (SELECT u.company_id
FROM user u
WHERE u.login_id = ?);
的問題是,它需要查找成千上萬的用戶這樣做此查詢一次一個是真的效率低下。我今天準備這樣做的是運行1個查詢是這樣的:
SELECT c.name
FROM company c
WHERE c.id = (SELECT u.company_id
FROM user u
WHERE u.login_id IN LIST (?,?,?...));
但我不知道如何將用戶的列表,然後匹配回到了公司?我如何獲得它以選擇與名稱匹配的login_id?
更新:如何將以下答案應用於從另一個數據庫中抽取合同信息的更復雜的查詢?當前的完整查詢看起來像這樣(這也牽扯了多行,每個活動合約級別都有一行,最後我也希望它將這些行合併爲1與所有合約類型的列表,以便我可以在該字段上運行grep 「最高」一個(除非還有一個方式做在SQL自定義排序,只返回第一個):
SELECT c.id,
c.name,
cs.id,
cs.name,
csc.contract_type,
csc.contract_status
FROM company c,
company_site cs,
company_site_contract csc
WHERE c.id = cs.company_id
AND cs.id = csq.site_id
AND csc.contract_status = 'ACTIVE'
AND cs.site_id IN (SELECT cs.site_id
FROM user u,
contact c,
company_site cs
WHERE c.id = u.company_id
AND cs.id = c.site_id
AND u.login_id = ?);
我可能想要做一個正確的加入,所以我們看看是否有任何用戶沒有公司assoc與他們有關。 – JNK 2010-10-04 19:06:41
謝謝!我認爲這將工作,當我弄清楚如何將它應用到更多的表格。爲了解決問題,我簡化了查詢,所以現在我需要去應用它到整個事情。 – Raugturi 2010-10-04 19:27:02
沒關係,我明白了。如果我只加入所有表格,那麼整個選擇是不必要的。 – Raugturi 2010-10-04 20:23:59