将数据规范化为一个表

时间:2013-03-14 14:28:27

标签: mysql sql cakephp

我只是在步骤id不存在的情况下,尝试从所有用户的表步骤中将行插入表(usersteps)。

INSERT INTO userssteps
(status,user_id,step_id)
SELECT  
'0' , 
(SELECT DISTINCT id from users),
(SELECT DISTINCT id from steps)

我在上面的MYSQL上得到以下错误

#1242 - Subquery returns more than 1 row

原因: 一个新用户注册他们应该获得所有步骤,如果我创建一个新步骤,我想在用户步骤中创建它以供当前用户查看。

如果有更聪明的方法可以做到这一点,我很想知道,但我很难过。我也在使用cakePHP,所以如果有一种特殊的cakePHP方式来帮助我,我宁愿这样做。

表格结构

steps:
id
name

users:
id
username
password

userssteps:
id
user_id
step_id
status

3 个答案:

答案 0 :(得分:1)

看起来你正在尝试生产笛卡尔积。 http://en.wikipedia.org/wiki/Cartesian_product

如果用户和步骤表之间没有关系,则它们无法连接,只能相乘。

INSERT INTO userssteps
(status,user_id,step_id) 
select 0,
users.id,
steps.id
from users
inner join steps

答案 1 :(得分:0)

尝试这种方式:

INSERT INTO userssteps
(status,user_id,step_id) 

select 0 as status,
users.id,steps.id
from users
inner join steps
on (users.id=steps.user_id);

这种方式应该有效;)

PS:现在加入是对的。

Saludos。

答案 2 :(得分:0)

subquerys(来自用户的SELECT DISTINCT id)和(来自步骤的SELECT DISTINCT id)将返回所有id。在insert子句中,您只需要一个值(不能超过1个值)。 您可以尝试通过ID

内部连接两个表