我意识到这些表具有相同的两列,但我正在使用不灵活的约束,因此我无法更改此结构。
TableA :
Host_ID | Carrier_ID
111 | 222 /*Row 1*/
111 | 333 /*Row 2*/
表B :
Host_ID | Carrier_ID
111 | 222
如果用户尝试通过网络表单从carrier_id
删除潜在客户TableA
,我正在处理一个表单,该表单将触发javascript警报。
我想在delete语句中编写一个where子句,以防止删除TableA
和TableB
(在本例中为第1行)中显示的行,因为TableB
存储所有的主要运营商。
允许用户通过网络表单删除第2行是完全可以的,因为Host_ID
中不存在Carrier_ID
和TableB
的组合。
答案 0 :(得分:2)
这是你想要的吗?
delete from tableA
where not exists (select 1
from tableB b
where tableA.Host_Id = b.Host_Id and tableA.Carrier_Id = b.Carrier_id
);
这是标准SQL,应该可以在任何数据库中使用。
编辑:
如果要删除特定值,请使用以下检查:
delete from tableA
where Host_Id = $Host_Id and Carrier_Id = $Carrier_ID and
not exists (select 1
from tableB b
where tableA.Host_Id = b.Host_Id and tableA.Carrier_Id = b.Carrier_id
);
答案 1 :(得分:0)
尝试
DELETE tablea
FROM tablea a LEFT OUTER JOIN tableb b
ON a.host_id = b.host_id
AND a.carrier_id = b.carrier_id
WHERE
b.host_id IS NULL
AND b.carrier_id IS NULL
AND a.host_id = '<<your value here>>'
AND a.carrier_id = '<<your value here>>
这使用外连接来检测tableb中是否存在匹配的行,并且当匹配的行不存在时允许删除
请参见此处的插图sql fiddler