2012-08-24 80 views
3

假設我有兩個表:Mysql的加入兩個表回收

zoo_tbl 
name 
------ 
dog 
cat 
monkey 
lion 
tiger 
elephant 
fish 

palette_tbl 
rgb 
------ 
pink 
yellow 
green 

我想要做的兩個表使得RGB排在一個週期重複加入。

name  rgb 
--------------------- 
dog  pink 
cat  yellow 
monkey  green 
lion  pink 
tiger  yellow 
elephant green 
fish  pink 

我該如何構建這個查詢?我有一個想法,在加入之前創建一個帶有循環rgb值的大臨時表,但即使我這樣做,我也必須在加入之前枚舉zoo_tbl和臨時表。必須有這樣做的更簡單/更直接的方式......

+0

鑑於表格無序存儲,您希望如何確定第一個表中的哪些記錄與第二個表中的哪些記錄配對?或者沒有關係? – eggyal

+0

我不認爲只用MySQL是可能的。如果你使用PHP或者其他東西來完成這件事會好嗎? – SexyBeast

+0

如果讓查詢更簡單 - 只要顏色以一種有序的方式循環使用,那麼您可以省略訂單或將其添加(作爲附加列)。 – kfmfe04

回答

5

假設你在表palette_tblid列有PRIMARY KEY,這會做的伎倆爲您提供:

SELECT name, 
     (SELECT rgb FROM palette_tbl WHERE id = @row_id) AS rgb, 
     (@row_id:= IF(@row_id = @cnt, 1, @row_id + 1)) AS dummy_id 
FROM zoo_tbl a, (SELECT @row_id:= 1, @cnt := (SELECT COUNT(1) FROM palette_tbl)) dummy; 

SQLFIDDLE DEMO HERE

+0

夢幻般的,Omesh!如果在接下來的一兩個小時內沒有更簡單的答案出現,我會接受這個答案! TY。 – kfmfe04

+0

+1。很好的邏輯。 – Pradeeshnarayan

+0

'COUNT(*)'或'SUM(1)'會更清潔,如果我可以nitpicky :) – biziclop