0

仅当步骤 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

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

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

表结构

steps:
id
name

users:
id
username
password

userssteps:
id
user_id
step_id
status
4

3 回答 3

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
于 2013-03-14T15:03:54.153 回答
0

子查询 (SELECT DISTINCT id from users) 和 (SELECT DISTINCT id from steps) 将返回所有 id。在插入子句中,您只需要一个值(您不能有超过 1 个值)。您可以尝试通过 ID 内部连接两个表

于 2013-03-14T14:41:24.460 回答
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:现在加入是正确的。

萨卢多斯。

于 2013-03-14T14:38:03.640 回答