MYSQL: ВСТАВИТЬ В, одновременно выполняя внутреннее объединение в том же запросе

#php #mysql

#php #mysql

Вопрос:

У меня возникли проблемы с пониманием того, как написать этот запрос MySQL, и многие ответы, которые я смог найти здесь, похоже, не очень помогают.

У меня есть две таблицы с этими строками:

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

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

Я пытаюсь добавить запись в таблицу опросов. В моем запросе я знаю unit_name of parent_unit , но мне нужно выяснить, что это unit_id такое.

Я давно не работал с mysql, поэтому у меня возникли проблемы с созданием внутреннего СОЕДИНЕНИЯ, которое заменило бы unit_name соответствующее unit_id .

Это то, что я пробовал до сих пор, но я думаю, что я очень далек от ответа:

 $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
  

Поскольку unid_id для родительской единицы «unit1» равно 0, что мы можем видеть в таблице единиц измерения:

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

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

Надеюсь, я объяснил себя достаточно, чтобы меня поняли.

Комментарии:

1. обновите свой вопрос, добавьте надлежащий образец данных и ожидаемый результат

Ответ №1:

Итак, начните с простого. Во-первых, каков запрос для поиска идентификатора модуля по имени модуля в units? В качестве элементарного запроса:

 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. Нужно ли мне также указывать ЗНАЧЕНИЯ, которые я затем хочу добавить?

2. Но это не то, что вы показываете, поэтому, если у вас другой вопрос, вам следует обновить свой пост, чтобы рассказать о том, что именно вы пытаетесь сделать, а не о чем-то подобном или достаточно близком к этому. В заданном вами вопросе вы вставляете только одно значение для одного столбца: parent_unit .

Ответ №2:

Судя по вашему объяснению, вам, похоже, нужно
объединение между ‘unit name’ из units и parent_id из сеансов на основе отношения между 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