Postgresql – 如何获取表中与另一个表中没有匹配的条目

前端之家收集整理的这篇文章主要介绍了Postgresql – 如何获取表中与另一个表中没有匹配的条目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,但我真的不知道怎么问!请多多包涵:
SELECT      sc.*,scd.siteid,scd.desc_frontend
FROM        shipping_code sc
LEFT OUTER JOIN shipping_code_description scd
    ON          scd.shippingid=sc.shippingid
    AND         scd.siteid IN (SELECT siteid FROM site_international WHERE published='t')

为了解释上述情况,我们在一个名为“shipping_code”的表格中有发货(交货)代码,而且因为我们有一个多语言网站,所以我们在“shipping_code_description”中有另一个用于这些代码的语言描述表.
我们还有一个名为“site_international”的表,其中包含以下字段:’siteid'(网站ID,例如英国,德国,法国..(英文,德文,法文)和“已发布”(布尔字段,即网站是否活着?)

上述SELECT查询获取所有的运输代码,并且只有这些已发布站点的语言描述.

现在,我们也想知道哪些运输代码在某些网站上没有描述.如果发货代码是全新的,那么将为该代码返回1行(因为LEFT OUTER JOIN). ‘scd.siteid’和’scd.desc_frontend’将为NULL.

但是,如果存在英国(英文)网站的描述,但FR和DE的描述不存在,则上述查询将只返回一行,而不是三行.如何知道特定运输代码的DE和FR说明丢失?

这是我的选择:

1)我可以以某种方式在一个查询内完成这一切.一定有办法(以前从来没有使用过UNION,除了以前,我不知道这些是我应该使用的).

2)或者我可以简单地做另一个查询
SELECT siteid FROM site_international WHERE published =’t’

以上将给我所有出版的网站.然后,使用PHP(我用来代码我的网站),对于上述较大查询的每个结果,我会检查并查看是否缺少任何描述.例如.以上的siteid查询将返回3个ID(UK,DE,FR).那么如果一个特定的运输代码只返回一个英国行,我会知道DE和FR丢失,我可以把它标记给我的客户端.

请指示是否存在更好的选项“1”?

非常感谢!

也许我不明白你的问题,但是如果你想获得一个表中没有匹配的条目在另一个表中,我可以给你一个简单的代码段.

选择左侧表格中不在右侧表格中的所有行.

SELECT  l.*
FROM    t_left l
LEFT JOIN t_right r
ON      r.value = l.value
WHERE   r.value IS NULL
原文链接:/postgresql/191808.html

猜你在找的Postgre SQL相关文章