SQL,加入同一个表

时间:2013-07-12 20:02:38

标签: sql join self-join

我有tablecodedocument。列code可能包含字母数字值(仅字母)和/或数字值(仅限数字)。在模型中,每个数字code都有一个字母数字等效code。以下记录代表了这种情况的一个示例(格式为documentcode);(documentcode):

(12345678900,ABC);(12345678900,999)

但是,字母数字code可能并不总是具有等效数字code,因此下面的示例代表我们有3个不同记录的情况

(12345678900,ABC);(12345678900,999);(00987654321,XYZ);(11111111111,DEF)

考虑到这一点,我想要做的是以下内容:我将用于搜索记录的内容始终是字母数字code,当我有一个等效的数字时,我想要数字一个,但是当alpha没有数字等价物时,我想要字母数字code

例如,如果我执行以下选择,我会得到以下结果:

  1. SELECT code FROM table WHERE code = 'ABC' - >结果:999
  2. SELECT code FROM table WHERE code = 'DEF' - >结果:DEF
  3. SELECT code FROM table WHERE code = 'XXX' - >结果:(空白)
  4. 如果有人能帮助我,我感激不尽。

    此致

    AMR

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT
    f1.doc
    , COALESCE(f2.code, f1.code) code
FROM foo f1
LEFT JOIN(
    SELECT doc, code
    FROM foo
    WHERE code <> @code
) f2 ON f2.doc = f1.doc
WHERE f1.code = @code

demo