同一个表中的SQL列比较(自联接)

时间:2013-04-09 10:04:03

标签: sql join self-join

我需要一个提示来解决这个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 {1}},所以:

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

2 个答案:

答案 0 :(得分:2)

ANSI SQL:

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

直播here

答案 1 :(得分:0)

开始分析您的任务:“获取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. 或他们的身份证 - 这应该是什么意思?