2010-05-20 66 views
1

我有一個表,自聯接表

 
    new_id----old_id----created_on 
    1234------5678------20100912 
    5678------3456------20100808 

我寫此查詢,

$q = "select event1.new_id, event1.old_id, event1.created_on,event2.new_id, event2.old_id, event2.created_on 
    FROM replaced_isbns event1 
    JOIN replaced_isbns event2 
    ON event2.new_id = event1.old_id 
    WHERE event1.new_id='$id'"; 

,但我得到的結果5678 - 1234,即只有一行,我想要所有的行...

@webdestroya,

它給只有一排.... 我想是這樣, 輸出NEW_ID 1234,old_id的是5678,3456等

+0

在你的例子中,你的表只包含2行。這對你的實際數據也是如此嗎? – 2010-05-20 05:13:33

+0

你在使用什麼數據庫? – TerrorAustralis 2010-05-20 05:55:21

回答

0

,如果你想不是試圖left outer join,並與新的ID替換空例如

所有行
SELECT 
    event1.new_id, event1.old_id, event1.created_on, 
    IFNULL(event2.new_id, event1.new_id), 
    IFNULL(event2.old_id, event1.old_id), 
    event2.created_on 
FROM replaced_isbns event1 
LEFT OUTER JOIN replaced_isbns event2 
    ON event2.new_id = event1.old_id 
WHERE event1.new_id='$id' 

檢查這可能會幫助你

+0

@ pranay, 它不返回任何結果 我想造成這個樣子, 對於NEW_ID 1234,old_id的是5678,3456等 – San82moon 2010-05-20 05:10:36

+0

嗨, 它給我的只有1234 - 5678 ,但我想,第二個結果也即5678 - 3456 它應該返回在你的WHERE條件的行 – San82moon 2010-05-20 05:18:25

+0

問題是你把ID,如果你希望所有記錄刪除where子句比U將得到的所有數據 – 2010-05-20 05:54:14

0

爲什麼要自加入?

SELECT replaced_isbns.* 
FROM replaced_isbns 
WHERE new_id = '$id' 
OR old_id = '$id' 

現在,對於結果中的每一行,檢查new_id = $ id,或者old_id = $ id。

+0

它只給我,1234 - 5678,但我想結果爲, 爲new_id 1234,old_id的是5678,3456等... 它應該返回所有行....如表中所示。 – San82moon 2010-05-20 05:21:15

0

據我瞭解,你所需要的所有的NEW_ID的old_ids: - 爲NEW_ID: - 1234老號「是5678和3456 同樣,對於第二個記錄: - 爲NEW_ID: - 5678老號」是3456. 我測試過了,它工作正常。

select new_id,b.old_id from 
    (select old_id from temp) 
    as b inner join temp as a 
     on a.new_id!=b.old_id 

不要讓我知道,如果這是你想要的或沒有的人。 我希望這有助於!

0

你將無法得到你想要使用的查詢,因爲沒有辦法來查詢SQL遞歸關係的結果(嗯,好吧,甲骨文已經START WITH ... CONNECT BY ...語法和CTE,但我想你不是在使用Oracle:p)。

但在另一方面,你可以嘗試這個鄰接錶轉換成一組嵌套的,因爲得到一個分支(給定父的所有子記錄)是很容易與嵌套集合。 Managing Hierarchical Data in MySQL是關於該主題的一篇有趣的文章。