我有一张桌子,
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 :(得分:0)
如果您想要所有行而不是尝试left outer join
并将null替换为新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'
检查这可能会对你有所帮助
答案 1 :(得分:0)
为什么要自我加入?
SELECT replaced_isbns.*
FROM replaced_isbns
WHERE new_id = '$id'
OR old_id = '$id'
现在,对于结果中的每一行,检查new_id = $ id,或者old_id = $ id。
答案 2 :(得分:0)
据我所知,你需要new_id的所有old_ids: - for new_id: - 1234 old id'是5678和3456。 类似的第二条记录: - 对于new_id: - 5678 old id'是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
请告诉我这是否是您想要的。 我希望这有帮助!
答案 3 :(得分:0)
您将无法使用查询获得所需的结果,因为无法在SQL中查询递归关系(好吧,Oracle有START WITH ... CONNECT BY ...语法和CTE,但是我想你不是在使用Oracle:p)。
但另一方面,您可以尝试将此邻接列表转换为嵌套集,因为使用嵌套集获取分支(给定父级的所有子记录)非常容易。 Managing Hierarchical Data in MySQL是一篇关于该主题的有趣文章。