我是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。
我不禁觉得这必须是一个非常标准的过程,但无法解决。
欢迎任何建议
西拉斯
答案 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';