用于ID的sql查询,这些ID从不显示特殊的组合

2vuwiymt  于 2021-06-26  发布在  Kylin
关注(0)|答案(3)|浏览(381)

我有两张table

id_a | id_b
-----------
01   | 011
01   | 012
02   | 021
02   | 022

id_b |  cl   | ds
------------------
011  | F9.00 | G
012  | F3.00 | G
021  | F9.00 | P
022  | G7.50 | G

这些表在id\u b上连接。现在我想知道每一个没有 F9.00 | G . 所以在这种情况下,我想要的结果是 02 . 尽管如此,争吵 01 | 012 | F3.00 | G 不匹配 F9.00 | G 要求,我不想有 01 因此,因为有组合 01 |011 | F9.00 | G01 作为 id_a .
现在想不出一个简单的问题。也许你们有些人有主意。
你好,sø任

r6l8ljro

r6l8ljro1#

select id_a
from table1
except
select t1.id_a
from table1 t1
inner join table2 t2
on t1.id_b=t2.id_b
where t2.c1 = F9.00
and t2.ds = G

此代码将在底部获取不需要的ID,在顶部获取所有ID,然后将它们排除在外

ygya80vv

ygya80vv2#

像这样:

select t1.id_a
from t1
  join t2 on t1.id_b = t2.id_b
where (t2.cl, t2.ds) <> ('F9.00', 'G')
group by t1.id_a
having count(*) = (select count(*) 
                   from t1 as t3
                   where t3.id_a = t1.id_a);

这会得到没有 'F9.00', 'G' 存在,并且只存在其结果行数与该行的总行数相同的那些 id_a .
在指定平台后编辑:
上面是ansisql-我不知道kylin是否支持ansisql。如果 where (t2.cl, t2.ds) <> ('F9.00', 'G') 不起作用,你需要使用 where t2.cl <> 'F9.00' and t2.ds <> 'G'

rur96b6h

rur96b6h3#

你可以用 CONCAT 在c1和ds列上:

SELECT DISTINCT id_a
FROM T1 INNER JOIN T2
ON T1.id_b = T2.id_b
WHERE id_a NOT IN
(SELECT id_a
 FROM T1 INNER JOIN T2
 ON T1.id_b = T2.id_b
 WHERE CONCAT(c1, ds) = 'F9.00G')

相关问题