2012-08-24 48 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