Mysql使用循环连接两个表
假设我有两张桌子:Mysql使用循环连接两个表,mysql,join,Mysql,Join,假设我有两张桌子: 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
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和临时表。必须有一种更简单/更直接的方法来实现这一点…假设您在表
调色板
的id
列上有主键
,这将为您实现以下目的:
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;
鉴于表是无序存储的,您希望如何确定第一个表中的哪些记录与第二个表中的哪些记录配对?或者这不重要吗?我认为单独使用MySQL是不可能的。如果您使用PHP或其他什么来完成这项工作,可以吗?如果这使查询更简单,您可以省去排序或添加它(作为附加列)——只要颜色以某种有序的方式循环,就可以了。如果可能的话,我更喜欢在MySQL中完成(作为视图或存储过程)-这样可以在其他应用中重复使用。我们的想法是有一个调色板表,如果有一个合适的视图/连接到任何我想用调色板“着色”的表,它将自动循环使用。@kfmfe04:好吧,如果有一个有序的列,可以连接调色板上的表
\u tbl.id=zoo\u tbl.id MOD 3
或类似的表。太棒了,Omesh!如果在接下来的一两个小时内没有更简单的答案出现,我会接受这个答案!TY.COUNT(*)
或SUM(1)
如果我能挑剔的话会更干净:)谢谢大家!:)@biziclop
:是的,这可能是我使用COUNT(1)
的老习惯,因为很久以前我在某个地方读到COUNT(1)
比COUNT(*)快,但这可能适用于MySQL的旧版本<代码>计数(*)
对于新版本和其他RDBMS系统也是一种更好的方法。