【问题标题】:SQL Column compare in the same table (self-join)SQL 列在同一张表中比较(自联接)
【发布时间】:2013-04-09 10:04:03
【问题描述】:

我需要一个提示来解决这个 SQL(自连接)问题:

一个表,包含valuecategory

 id    ||  value || category || foo
------------------------------------
 1     ||  1     || a        || 1
 2     ||  2     || a        || 4
 3     ||  3     || a        || 2
 4     ||  0     || b        || 2
 5     ||  1     || b        || 1
 6     ||  2     || b        || 4
 7     ||  3     || b        || 2
 8     ||  4     || b        || 2
 9     ||  5     || b        || 1
10     ||  5     || b        || 4
11     ||  6     || b        || 2
12     || 99     || z        || 2

我想比较b 类别中的所有值和a 类别中的所有值,并获取b 中而不是a 或其id 中的所有值,所以:

(0,1,2,3,4,5,5,6) “比较” (1,2,3) => (0,4,5,5,6)

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 我正在寻找“ansi sql”解决方案,它必须与 mysql、sqlite 和 postgres 一起使用。
  • “ANSI”解决方案通常不适用于 MySQL,因为它的 SQL 实现已经过时(EXCEPT 在阅读您的问题描述后立即浮现在脑海中)。

标签: sql join self-join


【解决方案1】:

ANSI SQL:

SELECT
*
FROM
tbl
WHERE
category = 'b'
AND value NOT IN (SELECT value FROM tbl WHERE category = 'a')

现场观看here

【讨论】:

    【解决方案2】:

    开始分析你的任务:“获取所有在 b 中而不是在 a 或它们的 id 中的值”

    1. 获取所有值> SELECT value FROM mytable
    2. 在 b > WHERE category = 'b'
    3. 而不是 > AND value NOT IN (SELECT value FROM mytable WHERE category = 'a')
    4. 或他们的 id - 这意味着什么?

    【讨论】:

    • "their id" = 列 id ...但子查询是解决方案。 ty
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多