sql—用于筛选无效值的外键查询

v1l68za4  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(275)

我有一张table叫 INSTALL 哪些外键指向另一个表 COMPONENT . 这是一种一对多的关系。
这个 COMPONENT 表具有值- PW , APS 以及 NPW .
INSTALL 可以有所有3个的外键。我想要那个 INSTALL 只有外键的记录 NPW 或者 APS 如果 INSTALL 也参考 PW 我不想在查询中输出这个。
我已经试过了 IN ('NPW, 'APS') 子句,但不筛选
PW INSTALL .
我怎样才能让它不输出呢 PW 安装?
我现在有个问题:

SELECT * FROM INSTALL 
LEFT JOIN COMPONENT ON INSTALLNO = COM$INSTALL
WHERE COM$COMPONENT IN (
      'NPW',
      'APS')
mnemlml8

mnemlml81#

请尝试以下操作:

SELECT * FROM INSTALL 
INNER JOIN COMPONENT ON INSTALLNO = COM$INSTALL
WHERE COM$COMPONENT IN (
      'NPW',
      'APS')
AND COM$COMPONENT != 'PW'

返回值为的行 COM$COMPONENT 等于 NPW 或者 APS 但不同于 PW 现在从 COMPONENT 未被引用的表:

SELECT * FROM COMPONENT 
 WHERE NOT EXISTS 
       (SELECT NULL 
          FROM INSTALL 
         WHERE INSTALLNO = COM$INSTALL
           AND COM$COMPONENT IN ('NPW','APS') 
           AND COM$COMPONENT != 'PW')
ecfdbz9o

ecfdbz9o2#

这应该管用

SELECT * FROM INSTALL A 
LEFT JOIN (SELECT * FROM COMPONENT WHERE COM$COMPONENT != 'PW') B
ON A.INSTALLNO = B.COM$INSTALL

相关问题