我有一个插入表格,我在adobe coldfusion中做过。此插入表单将我团队中的人员信息插入名为squadreport的数据库表中。每次插入我的squadreport表后,我想从我的团队中尚未插入的人的可用名称的菜单列表中删除我刚插入的人的姓名。这样我就不会意外地重新插入他们的名字。菜单列表是从我的NAMES表生成的。我的NAMES表中的name.foiid字段与我的SQUADREPORT表中的squadreport.squfoiid字段相匹配。
示例:如果已经记录了开始日期为“2012-11-18”并且结束日期为“2012-11-24”的squadreport.squfoiid,那么我想阻止同一个人重新插入相同的日期等。
我当前的语法将生成一个空白列表。
这是我目前的语法:
<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 :(得分:1)
假设您将行插入到具有匹配foiid
列的SquadReport中,您只需要排除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>
答案 1 :(得分: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
我认为您发布的代码是早期开发代码。进入生产后,您将需要使用日期对象而不是字符串和任何变量的查询参数。