MYSQL:INSERT INTO,同时也在同一查询中执行INNER JOIN

时间:2019-03-09 16:59:26

标签: php mysql

我在理解如何编写此MySQL查询时遇到了麻烦,在这里我能找到的很多答案似乎并没有太大帮助。

我有两个带有以下行的表:

units
-----------------
unit_id (INT)
unit_name(STRING)

surveys
-----------------
survey_id (INT)
parent_unit(INT)

我正在尝试向调查表中添加一条记录。在我的查询中,我知道unit_name中的parent_unit,但是我需要找出unit_id是什么。

我已经有一段时间没有使用mysql了,所以我无法创建一个用相应的unit_name替换unit_id的INNER JOIN。

这是我到目前为止尝试过的方法,但是我认为我离答案还很远:

$unit_name = "unit1"

INSERT INTO surveys (parent_unit) 
SELECT * FROM units
INNER JOIN units ON $unit_name=units.unit_name
VALUES ("unit name") //This should be an INT

此查询的结果将是:

survey_id | parent_unit
----------+------------
        0 |           0

由于“ parent_unit“ unit1”的unid_id为0,我们可以在units表中看到:

> SELECT * FROM units WHERE unit_name LIKE "unit1";

unit_id | unit_name
--------+----------
      0 |     unit1

我希望我对自己的解释足以被理解。

2 个答案:

答案 0 :(得分:1)

因此,从简单开始。首先,在给定单位名称的情况下从单位中查找单位ID的查询是什么?作为基本查询:

SELECT unit_id
FROM units
WHERE unit_name LIKE "the_unit_name_you_have"

因此,我们来看看您实际想要做什么:您需要建立一个调查记录,并且拥有一个单位名称。与其对每个可能的单元进行全表联接,我们只需要重复精确的选择,然后将其放入表中即可:

INSERT INTO surveys (parent_unit)
SELECT unit_id AS parent_unit
FROM units
WHERE unit_name LIKE "the_unit_name_you_have"

(还要注意,AS完全是可选的,但可以使人更容易跟踪事物)

答案 1 :(得分:1)

根据您的解释,您似乎需要
基于unit_id和parent_id之间的关系

INSERT INTO surveys (parent_unit) 
SELECT unit_id 
FROM units u
INNER JOIN surveys  s ON u.unit_name = 'unit name' 
    and u.id = s.parent_unit