对不起的标题感到抱歉,不知道如何更好地说出来。
我试图抛弃父母的任何实例,其中包含一个包含x,y或z的子元素
SELECT P.label, P.creationclass, P.attributes, P.type, P.uniqueid, C.label, C.idx, C.PID, C.creationclass, C.attributes, C.type, C.uniqueid
FROM t_equip_template AS P
LEFT JOIN t_equip_template AS C
ON P.ID = C.PID //only way to join these
WHERE P.type = '1003'
AND
C.creationclass NOT LIKE x
AND
C.creationclass NOT LIKE y
AND
C.creationclass NOT LIKE z;
为了进一步说明,我的结果集删除了某些内容
的实例 C.creationclass NOT LIKE [x y or z]
但这不够明显,因为有些情况下上面的情况属实,但我仍然得到一个包含P.ID的结果,其中一个孩子实际上有x,y,z为真(尽管它们是未显示在结果列表中)。我宁愿将整个事情抛弃,而不仅仅是x,y,z是或不是真的'
因为这是我加入两个表的唯一方法
P.ID = C.PID
我仍然得到我不想要的P.ID实例。
有没有办法合并' P.uniqueid'如果' x,y,z'是否是P.ID = C.PID'然后抛弃P.uniqueid,而不仅仅是那个特定的&P.CID' P.uniqueid'?
感谢您的帮助。
示例:
P.ID P.uniqueid C.PID C.creationclass
1 00001 1 w <--There is a 'hidden result' x,y or z for this
1 00001 1 v <--There is a 'hidden result' x for this
1 00001 1 u <--There is a 'hidden result' x for this
2 00002 2 w
2 00002 2 v
3 00003 3 w
3 00003 3 v
我想要的是:
P.ID P.uniqueid C.PID C.creationclass
2 00002 2 w
2 00002 2 v
3 00003 3 w
3 00003 3 v
我想要的结果抛出00001的每个实例而不是onyl那些没有通过标准的特定实例。
解决方案,感谢@JohnBollinger
SELECT
P.label,
P.creationclass,
P.attributes,
P.type,
P.uniqueid,
C.label,
C.idx,
C.PID,
C.creationclass,
C.attributes,
C.type,
C.uniqueid
FROM
t_equip_template AS P
LEFT JOIN t_equip_template AS C
ON P.ID = C.PID
WHERE
P.type = '1003'
AND
AND NOT EXISTS (
SELECT 1 FROM
t_equip_template AS C2
WHERE
P.ID = C2.PID
AND (C2.creationclass LIKE x
OR C2.creationclass LIKE y
OR C2.idx LIKE z )
)
答案 0 :(得分:1)
如果我正确理解您的问题,您需要使用NOT EXISTS
(假设SQLAnywhere允许该语法)。
SELECT
P.label,
P.creationclass,
P.attributes,
P.type,
P.uniqueid,
C.label,
C.idx,
C.PID,
C.creationclass,
C.attributes,
C.type,
C.uniqueid
FROM
t_equip_template AS P
LEFT JOIN t_equip_template AS C ON P.ID = C.PID
WHERE
P.type = '1003' AND
NOT EXISTS
(
SELECT *
FROM
t_equip_template C
WHERE
C.PID = P.PID AND
C.creationclass IN (x, y, z)
)
答案 1 :(得分:0)
以下是您提出要求的一种方式:
SELECT
P.label,
P.creationclass,
P.attributes,
P.type,
P.uniqueid,
C.label,
C.idx,
C.PID,
C.creationclass,
C.attributes,
C.type,
C.uniqueid
FROM
t_equip_template AS P
LEFT JOIN t_equip_template AS C
ON P.ID = C.PID
WHERE
P.type = '1003'
AND NOT EXISTS (
SELECT 1 FROM
t_equip_template AS C2
WHERE
P.ID = C2.PID
AND (C2.creationclass LIKE x
OR C2.creationclass LIKE y
OR C2.creationclass LIKE z)
)
对于只考虑连接结果的单行的任何连接或过滤条件,都不能这样做,因为要过滤的信息是多行的函数。