2015-07-04 56 views
0

我對SQL很陌生,在解決以下問題時遇到了問題。我的實際問題非常複雜,但下面的例子解決了我的問題。從一個表格翻譯兩行到另一個表格的SQL

想象兩個表如下: -

表1

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

表2

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

在ID1和ID2這兩個數字的表1中的含義是由說明書中給出在表2.

據我瞭解,以下查詢將允許我使用說明,而不是在where子句中的表1的ID爲ID1:

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

但我不能工作了是指定它,這樣我可以在where子句中同時訪問兩個ID1和ID2的一種方式通過表2中定義的描述。

我不禁感到,這必須是一個非常標準的過程,但不能解決它。

任何建議是最歡迎的

西拉

回答

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' 
      ); 
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'; 
相關問題