gpt4 book ai didi

Postgresql - 如何在一个表中获取在另一个表中没有匹配项的条目

转载 作者:行者123 更新时间:2023-11-29 11:09:28 24 4
gpt4 key购买 nike

我有一个问题,但我真的不知道怎么问!请耐心等待:

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 - 例如英国、德国、法国..(英语、德语、法语..)和“published”( bool 字段,即网站是否在线?)

上面的 SELECT 查询获取所有运输代码,以及它们仅针对那些已发布网站的语言描述。

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

但是,如果存在对英国(英语)站点的描述,但不存在对 FR 和 DE 的描述,则上述查询将只返回一行,而不是三行。我如何判断特定运输代码缺少 DE 和 FR 说明?

以下是我的选择:

1) 我可以以某种方式在一次查询中完成所有这些。一定有办法(我以前从未使用过 UNION、EXCEPT 等,我不确定这些是否是我应该使用的)。

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

以上会给我所有已发布的网站。然后,使用 PHP(我用它来编写我的网站代码),对于上述较大查询的每个结果,我会检查并查看是否缺少任何描述。例如。上面的 siteid 查询将返回 3 个 ID(英国、德国、法国)。然后,如果针对特定的运输代码仅返回一行 UK,我就会知道缺少 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 - 如何在一个表中获取在另一个表中没有匹配项的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com