SQL将一个表中的两行与另一个表进行转换

时间:2015-07-04 15:06:13

标签: sql

我是SQL的新手,我遇到以下问题。我的实际问题非常复杂,但下面的例子解释了我遇到的问题。

想象一下两个表如下: -

表1

|Name | ID1 | ID2 |
--------------------
| xxx | 1  |  1   |
--------------------
| yyy | 3  |  1   |
--------------------
| zzz | 2  |  1   |

表2

| ID | Desc |
--------------
| 1  | aaa  |
-------------
| 2  | bbbb |
--------------
| 3  | ccc  |

表1中ID1和ID2中两个数字的含义由表2中的描述给出。

据我所知,以下查询允许我在where子句中使用表1中ID1的描述而不是ID:

SELECT name
FROM Table1 INNER JOIN
     Table2
     ON Table.ID1 = Table2.ID
where Table2.Desc = 'aaa';

但我无法解决的是一种指定它的方式,以便我可以通过Table2中定义的描述在where子句中同时访问ID1和ID2。

我不禁觉得这必须是一个非常标准的过程,但无法解决。

欢迎任何建议

西拉斯

2 个答案:

答案 0 :(得分:0)

首先,将两个ID存储在两个不同的列中通常是个坏主意。有时它没问题,但通常你需要一个每个名称和id一行的联结表。

编写查询的另一种方法是使用EXISTS。这是一种方法:

SELECT t.*
FROM Table1 t
WHERE EXISTS (SELECT 1
              FROM table2 t2
              WHERE t2.id IN (t.id1, t.id2) AND t2.Desc = 'aaa'
             );

答案 1 :(得分:0)

您可能正在寻找这个?

SELECT name
FROM 
    Table1 t
    INNER JOIN Table2 t1
    ON t.ID1 = t1.ID
    INNER JOIN Table2 t2
    ON t.ID2 = t2.ID
WHERE 
    t1.Desc = 'aaa'
AND t2.Desc = 'ccc';