实际上我怀疑存在运算符
有两张桌子。
CREATE TABLE EMPDETAIL(
EID NUMERIC(8),
NAME VARCHAR(20),
DOB DATE,
ADDRESS VARCHAR(50),
CONTACTNO NUMERIC(13)
)
CREATE TABLE EMPWEBDETAIL(
EID NUMERIC(8),
EMAIL VARCHAR(30),
USERID VARCHAR(10),
PSWORD VARCHAR(10)
)
现在我想获得在empdetail表中有条目但不在empwebdetail中的员工,
我可以使用连接,子查询,相关子查询
来实现但我想用exists运算符来做.. 解决方案是
SELECT A.EID, A.NAME FROM EMPDETAIL AS A WHERE EXISTS( SELECT B.EID FROM EMPWEBDETAIL AS B WHERE A.EID = B.EID)
这会给我想要的结果
我的查询仅限于检查父母的表达会产生某些结果,或者我们可以说如果它返回正确或错误,其工作仅限于上述情况
但是看看下面的第二个问题..
SELECT A.EID, A.NAME FROM EMPDETAIL AS A WHERE EXISTS(SELECT B.EID FROM EMPDETAIL AS B WHERE B.EID IN (111,112,113))
根据以前的结果,它应该只给我这三个雇员的记录(111,112,113) 但是它给了EMPDETAIL TABLE的完整行...
答案 0 :(得分:2)
这是你想要的吗?
SELECT A.EID, A.NAME
FROM EMPDETAIL AS A
WHERE EXISTS(SELECT B.EID FROM EMPWEBDETAIL AS B WHERE A.EID = B.EID)
AND A.EID IN (111,112,113)
第一个示例中的exists
子句有效,因为您正在使用A.EID = B.EID
对两个查询进行关联。保留该信息并为WHERE
添加额外的IN
查询过滤器。
答案 1 :(得分:0)
不,存在将返回该行的存在部分为真的所有行。
因此甚至
SELECT A.EID, A.NAME
FROM EMPDETAIL AS A
WHERE EXISTS(SELECT B.EID FROM EMPDETAIL AS B WHERE 1 = 1)
将返回EMPDETAIL
看一下下面的演示
答案 2 :(得分:0)
您仍需要将EXISTS表加入外部查询表以限制结果。您的第二个查询需要更多:
SELECT A.EID, A.NAME
FROM EMPDETAIL AS A
WHERE EXISTS(SELECT B.EID FROM EMPDETAIL AS B
WHERE B.EID = A.EID AND B.EID IN (111,112,113))
或更好的版本是:
SELECT A.EID, A.NAME
FROM EMPDETAIL AS A
WHERE EXISTS(SELECT B.EID FROM EMPDETAIL AS B WHERE B.EID = A.EID)
AND A.EID IN (111,112,113))