【问题标题】:SELECT values excluding values from other SELECT [duplicate]SELECT 值不包括来自其他 SELECT 的值 [重复]
【发布时间】:2014-08-23 07:53:12
【问题描述】:

我有一个选择,它给我带来了一些主键。我需要从其他表中选择上一个查询中未列出的所有值。我该怎么做?

我一直在尝试:

SELECT id
FROM tab1,
   ,(SELECT id...
     WHERE LIKE '%abc%'
    ) AS result
WHERE result != tab1.id;

但是没有用,它还给我带来了来自子查询的数据。我正在使用 PostgreSQL。

【问题讨论】:

  • result 是您的内部查询结果的别名,作为表名,选定的列将是该表的列。所以你只把它当作一张桌子。然后你需要做result.id 在比较中使用特定的列。
  • 这是我现在的 SQL:SELECT distinct(query1.codcli) FROM tbcli as query1 RIGHT OUTER JOIN (SELECT tab2.codcli FROM tbsrv as srv INNER JOIN tbsrvcli as srvcli ON srv.codserv = srvcli.codserv INNER JOIN tbcli as tab2 ON tab2.codcli = srvcli.codcli where servico not like '%Sonic%') as query2 ON query2.codcli = query1.codcli;但还是不行
  • 为什么在你使用 PostgreSQL 的时候这个标签是 MySQL?

标签: sql postgresql


【解决方案1】:

你可以试试这个,

SELECT * from table1 WHERE id NOT IN (SELECT id from table2 where );

其中“id”在两个表(即表 1 和表 2)中都是通用列。 并且将成为您在内部查询中从 table2 获取记录所需的任何条件。

【讨论】:

【解决方案2】:
SELECT id
FROM tab1 t1
WHERE NOT EXISTS (
    SELECT 1
    FROM tab2 t2
    WHERE t2.id = t1.id 
    -- AND t2.name LIKE '%abc%'
    )
    ;

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 这个查询与RSB给出的答案中的查询类似。
【解决方案3】:
SELECT tab1.id
FROM tab1 LEFT OUTER JOIN
    (SELECT id
     FROM ...
     WHERE LIKE '%abc%'
     ) AS result
ON result.ID = tab1.id
where result.ID is null;

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 2017-02-03
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多