2013-02-25 86 views
0

我试图抓取所有提供给未在其项目中排队的用户的提议。所以,我抓住从OfferSuggestionHeader表基于我的用户的ID报价也尝试以确保它不会抢用户已添加到他们的任何项目(存储在Projects表)根据另一个表中的内容选择一些条目

我我得到了以下查询:

SELECT DISTINCT ofh.OfferID, ofh.OfferTitle, ofh.OfferVendor, ofh.Savings,ofh.SavingsPercent 
    FROM OfferSuggestionHeader ofh 
LEFT JOIN OfferSuggestionDetail osd 
    ON ofh.OfferID = osd.OfferID 
LEFT JOIN Facilities f 
    ON osd.FacilityID = f.id 
LEFT JOIN UserFacility uf 
    ON f.id = uf.fid 
LEFT JOIN Users u 
    ON uf.uid = u.uid 
LEFT JOIN Projects p 
    ON p.uid = u.uid 
WHERE p.uid = '1' 
    AND ofh.OfferID <> ANY (SELECT offer_id FROM Projects WHERE uid = '1') 

它拉起所有的报价。如果我拿走了ANY,那么我得到一个错误,指出子查询返回的结果太多。

有6家优惠。三个排队由用户1.我不应该看到优惠1,4或5.

感谢您的任何指针和帮助。

+1

你可以尝试<<和ofh.OfferID NOT IN(SELECT offer_id FROM项目其中uid =“1” )>> – 2013-02-25 16:07:05

+0

@John,这个'SELECT offer_id FROM WHERE uid ='1''返回uid = 1下的6个offer。是否表示来自'1,2,3,4,5,6'的offer ID?而且你还指定你不想要'1,4,5'吗?因此,如果在主查询中已经有JOIN Projects表并且包含WHERE P.uid = 1,那么只需简单地执行'AND ofh.OfferID Not in(1,4,5)'就可以了。 – bonCodigo 2013-02-25 16:23:07

+0

谢谢,伙计们。你是对的。我显然有一阵白痴。我尝试了'IN'来代替'ANY'操作,但是并没有想到添加现在非常明显的'NOT'! @bonCodigo,我需要使用'SELECT',因为我不想要1,4和5(在1-6中)只知道,因为我正在开发它,所以'SELECT'语句将就位我的'全知':)再次感谢! – 2013-02-25 16:56:50

回答

0

根据我的评论说明,为什么不试试这个?我不知道为什么你需要一个子查询时,你已经有项目表中的主查询中联接..

WHERE p.uid = '1' 
    AND ofh.OfferID NOT IN (1, 4, 5); 
相关问题