2011-08-29 52 views
0

我想要一個查詢'dave'搜索,將顯示前三行。 '邁克'和'卡爾'都有戴夫的優點。所以顯示的三排將成爲前三名。什麼類型的查詢將完成此操作?

+----+----------+------------+ 
| id | parentid|  user | 
+----+----------+------------+ 
| 1 |  null |  dave | 
| 2 |  1 |  mike | 
| 3 |  1 |  carl | 
| 4 |  2 |  rick | 
| 5 |  4 |  mike | 

什麼類型的查詢將完成此操作?嵌套查詢?

回答

2

沒有嵌套

select 
    c.* 
from 
    YourTable c 
    left join YourTable p on p.id = c.parentid 
where 
    p.user = 'dave' /* for the 'children' */ or 
    c.user = 'dave' /* for Dave himself */ 

如果你不想自己戴夫返回,但只有孩子,你可以從where條款離開「c.user」。在這種情況下,您也可以將left join更改爲inner join,儘管您在此查詢中可能沒有注意到它。

+0

謝謝,所以你用內部連接聲明一個表名,在這種情況下你使用'c'和'p'?非常感謝。 – user892134

+0

你給一個表別名。它使您的查詢更清晰,更短。它可以讓你自己加入一張桌子,就像我在這裏所做的那樣。別名和加入是獨立的技術,儘管經常一起使用。執行加入是爲了將所有記錄加入其父母。這樣,您可以通過過濾父母的姓名來返回所有孩子。你可以用嵌套查詢來做到這一點,但這可能會變慢,特別是在MySQL中(它討厭嵌套查詢)。 – GolezTrol

0
Select * from 
table_name as partA inner join table_name as partB on partA.id = partB.parentid 
Where partA.user = "Dave" or partB.user = "Dave" 
相關問題