2012-11-04 44 views
3

我有以下結構表:MySQL:從表中顯示特定記錄?

表1

| ID1 | NAME | GROUP_ID | 
------------------------- 
| 1 | AAA |  101 | 
| 2 | A_A |  101 | 
| 3 | BBB |  0 | 
| 4 | CCC |  103 | 
| 5 | C_C |  103 | 
| 6 | DDD |  0 | 
| 7 | EEE |  0 | 
| 8 | FFF |  0 | 
| 9 | GGG |  0 | 
| 10| HHH |  104 | 
| 11| H_H |  104 | 

表2

| ID2 | NAME | 
-------------- 
| 1 | AAA | 
| 2 | BBB | 
| 3 | C_C | 

| GROUP_ID | NAME | 
------------------- 
|  101 | AAA | 
|  101 | A_A | 
|  103 | CCC | 
|  103 | C_C | 
|  104 | HHH | 
|  104 | H_H | 

'table1'是一個包含所有元素的表格。在這個表格中有由標準創建的重複記錄,並且這些元素被插入到表格「組」中。在表2中有與來自table1的元素匹配的元素。

我想顯示table1中不在table2中的所有記錄。如果table2中的元素位於表格組中,則不會在結果表格中顯示此組中的所有元素。在這種情況下,元件是AAA/A_A(GROUP_ID 101)和CCC/C_C(GROUP_ID 103)

結果表

| ID1 | NAME | GROUP_ID | 
------------------------- 
| 6 | DDD |  0 | 
| 7 | EEE |  0 | 
| 8 | FFF |  0 | 
| 9 | GGG |  0 | 
| 10| HHH |  104 | 
| 11| H_H |  104 | 

不結果表與名稱A_A和C_C的元件,因爲本項是重複的。

我嘗試這樣做: http://sqlfiddle.com/#!2/70253/3

回答

2

此查詢將從table1顯示所有元素不在table2按名稱,和 也將過濾掉所有那些具有相同ID作爲group條目存在於table2(重複你的情況)中的條目。

select t1.* from table1 t1 left join groups g on t1.name=g.name 
left join table2 t2 on t2.name=t1.name 
where (g.group_id is null or g.group_id not in (SELECT gg.group_id FROM TABLE2 t2 inner join groups gg on gg.name=t2.name)) 
and t2.id2 is null; 

查看已更新的sqlFiddle

+0

SQL fidle不包括表格組中的記錄抱歉。這是正確的http://sqlfiddle.com/#!2/70253/3 – dido

+0

@dido看到我更新的答案 – dan

2

如何:

對於常用的組:

select * from table1 
where NAME not in (SELECT distinct(name) FROM TABLE2) 

對於所有的組,不管用:

select * from table1 
where NAME not in (SELECT distinct(name) FROM groups) 

http://sqlfiddle.com/#!2/83b7c/45