插入到表中,其中值具有子查询并返回多行

时间:2013-08-23 01:09:46

标签: mysql sql database

所以我有两个表(table_userstable_values

table_users的列包含id(主要自动增量),usernamelogitudelatitude

table_valuesuser_id列和otherUser_id列组成。主键或唯一或自动增量都不会。

table_value的目的是存储与登录用户具有相同logitudelatitude的所有用户ID。但是我不想添加主用户本身,只想添加与他/她的位置值匹配的用户。此外,如果已添加其他用户而不管其位置值如何,我也不想添加其他用户。

下面以bob为例。我想查询table_users并将所有匹配bob的经度和纬度的用户id插入table_values但不是bob自己。

Table_users 
id    username longitude latitude
1      bob      1          2
2      sam      1          2
3      fred     3          4
4      alex     1          2

Table_values
user_id     otherUserId
1              2
1              4
2              1
2              4
4              1
4              2

所以目前我可以添加具有相同位置的用户而无需添加主用户,但我无法在table_values中添加多行。此外,当我运行当前的mysql查询时,我添加了重复项,这不是我想要的。

到目前为止,这是我的查询

INSERT INTO `table_values` (`user_id`, `otherUser_id`) VALUES ((Select `id` FROM `users` WHERE `username` = 'bob'), (Select `id` FROM `users` where `longitude` = 'bobs logitude AND `latitude` = bobs latitude AND `username` != 'bob'))

值bob,12和3只是示例。这些将基于它是哪个用户。值正在通过php post方法传递

1 个答案:

答案 0 :(得分:0)

您想使用insert . . . select,而不是insert . . . values。以下插入所有对应于“bob”的对:

INSERT INTO `table_values` (`user_id`, `otherUser_id`)
     Select `id`
     FROM `users` u1 join
          `users` u2
          on u1.value_1 = u2.value_2
     WHERE u1.`username` = 'bob' and u2.username <> 'bob';

以下内容将它们插入尚不存在的位置:

INSERT INTO `table_values` (`user_id`, `otherUser_id`)
     Select u1.`id`, u2.id
     FROM `users` u1 join
          `users` u2
          on u1.value_1 = u2.value_2
     WHERE u1.`username` = 'bob' and u2.username <> 'bob' and
           not exists (select 1 from table_values where u1.id = user_id and u2.id = otherUser_id);

我不确定你是否想以不同的顺序检查它们。

考虑到问题的性质,我不确定“value_1 = 12 AND value_2 = 3”是什么意思。