Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql使用循环连接两个表_Mysql_Join - Fatal编程技术网

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系统也是一种更好的方法。