我正在努力解决这个问题。试图选择没有附加/分配图像的项目。
select distinct a.itm_id, a.itm_num, d.att_type from saitem as a
join saassignment as b on b.itm_id = a.itm_id
join sacatalogitem as c on c.itm_id = a.itm_id
join saattachment as d on d.att_id = b.att_id
where c.cat_id = '307'
and d.att_type not like '%application%'
and d.att_type not like '%text%'
and d.att_type not like '%url%'
and d.att_type not like '%image%'
order by a.itm_id ASC
我过滤掉了所有其他附件类型(应用程序,文本和网址)。如果在saattachment表中不包含附件类型%image%,如何告诉sql选择saitem表中的记录?现在我正在过滤掉所有%image%附件类型,因为我不知道如何正确定义以获得我正在寻找的内容......
编辑:我正在尝试选择表SAITEM中的所有记录,其中表SAATTACHMENT中没有链接的'%image%'附件类型(列是att_type)。我的问题是att_type列包含不同的类型,例如应用程序,文本和url,所以我不能只写没有图像附件的地方。
示例数据:
答案 0 :(得分:1)
有几种方法可以做到。
一种方法是进行ANTI-JOIN
select distinct a.itm_id, a.itm_num, d.att_type from saitem as a
join saassignment as b on b.itm_id = a.itm_id
join sacatalogitem as c on c.itm_id = a.itm_id
LEFT join saattachment as d on d.att_id = b.att_id
and d.att_type like '%image%'
where c.cat_id = '307'
and d.att_id is null
这将使您的INNER JOIN成为LEFT JOIN。然后它在右侧的连接字段上测试NULL
此外,从技术上讲,这只会找到任何没有图像附件的saassignment
,这些附件可能适合您的需要,也可能不适合您。如果您提供样本数据或有关数据的更多详细信息,您可以获得更完整的答案