1

我有一个插入表格,我在 adobe Coldfusion 中做了。这个插入表单将来自我团队中的人的信息插入到一个名为squadreport 的数据库表中。每次插入我的小队报告表后,我想从我的团队中尚未插入的可用姓名的菜单列表中删除我刚刚插入的人的姓名。这样我就不会意外地重新插入他们的名字。菜单列表是从我的 NAMES 表中生成的。NAMES 表中的 name.foiid 字段与 SQUADREPORT 表中的squadreport.squfoiid 字段匹配。

示例:如果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>
4

2 回答 2

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>
于 2013-01-03T15:19:04.597 回答
0

所以你基本上想要做的就是显示不在表squadreport中的人?像这样的东西应该工作:

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

我假设您发布的代码是早期开发代码。投入生产后,您将希望对任何变量使用日期对象而不是字符串和查询参数。

于 2013-01-03T15:20:42.950 回答