2013-01-03 50 views
1

我有一個在Adobe Coldfusion中做過的插入表單。該插入表單將來自我的團隊成員的信息插入名爲squadreport的數據庫表中。在每次插入到我的班組報告表後,我想從我的團隊中尚未插入的人員的可用姓名的菜單列表中刪除我剛插入的人員的姓名。這樣我就不會意外地重新插入他們的名字。菜單列表從我的NAMES表中生成。我的NAMES表中的name.foiid字段與我的SQUADREPORT表中的squadreport.squfoiid字段相匹配。coldfusion從菜單/列表中隱藏/刪除名稱

示例:如果squadreport.squfoiid已經記錄,開始日期爲「2012-11-18」,結束日期爲「2012-11-24」,那麼我想阻止同一個人重新插入相同的日期等

我目前的語法將生成一個空白列表。

這裏是我當前的語法是什麼樣子:

<cfquery name="brother" datasource="master"> 
SELECT name.foiid, squadlt, squadlt.ltid, CONCAT(name.fname,' ',name.lname) AS teammember 
FROM name 
LEFT JOIN name ON name.foiid = squadreport.squfoiid 
LEFT JOIN squadlt ON ltid = squadreport.sqult 
WHERE name.foiid is null 
AND squweekbegin =’2012-11-18’ 
AND squweekend = ‘2012-11-24’ 
AND squadlt = '3' 
AND ltid = '3' 
AND CITY = 'sandiego' 
AND STATUS <> 'd' 
AND STATUS <> 'T' 
AND Form4444Complete = 'yes' 
ORDER BY teammember 
</cfquery> 
+0

這是您的實際查詢嗎?它看起來不正確。例如'name'被引用兩次,沒有別名,什麼是'squadreport'(表或別名)?你可以發佈你的實際查詢*和*在where子句中包含所有列的源表嗎? – Leigh

回答

1

假設你插入行到SquadReport匹配foiid列,你只需要排除存在於該SquadReport表foiid值。如果還有其他條件,例如小隊成員必須被激活或部署,或者其他情況,只需將其添加到排除條款中即可。

<cfquery name="brother" datasource="master"> 
SELECT name.foiid, squadlt, squadlt.ltid, CONCAT(name.fname,' ',name.lname) AS teammember 
FROM name 
LEFT JOIN name ON name.foiid = squadreport.squfoiid 
LEFT JOIN squadlt ON ltid = squadreport.sqult 
WHERE name.foiid is null 
AND squweekbegin =’2012-11-18’ 
AND squweekend = ‘2012-11-24’ 
AND squadlt = '3' 
AND ltid = '3' 
AND CITY = 'sandiego' 
AND STATUS <> 'd' 
AND STATUS <> 'T' 
AND Form4444Complete = 'yes' 
<!--- new code here ---> 
AND name.foiid NOT IN (SELECT foiid FROM SquadReport) 
<!--- end new code ---> 
ORDER BY teammember 
</cfquery> 
0

那麼你基本上想要做的是顯示不在表中的人員報告?這樣的東西應該工作:

select name.foiid 
, CONCAT(name.fname,' ',name.lname) AS teammember 
from name 
where not exists 
(select 1 
from squadreport 
where squfoiid = name.foiid 
and other constraints 
) 
and other constraints 

我假設您發佈的代碼是早期開發代碼。一旦開始生產,您將希望使用日期對象而不是字符串,併爲任何變量查詢參數。