Каков наилучший способ обновить одну таблицу из другой в SQL?

У меня есть 2 таблицы, первая — страница продукта посетил

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| idproduct  | varchar(128) | YES  |     | NULL    |                |
| logdate    | date         | YES  |     | NULL    |                |
| idmagasin  | int(20)      | YES  |     | NULL    |                |
| idenseigne | int(20)      | YES  |     | NULL    |                |
| commanded  | int(2)       | YES  |     | 0       |                |
+------------+--------------+------+-----+---------+----------------+

И второй продукт скомандовал

+-------------+--------------+------+-----+-------------------+----------------+
| Field       | Type         | Null | Key | Default           | Extra          |
+-------------+--------------+------+-----+-------------------+----------------+
| id          | int(11)      | NO   | PRI | NULL              | auto_increment |
| idproduct   | varchar(255) | NO   |     | NULL              |                |
| idenseigne  | int(11)      | NO   |     | NULL              |                |
| idmagasin   | int(11)      | NO   |     | NULL              |                |
| ingredients | tinytext     | YES  |     | NULL              |                |
| date        | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+--------------+------+-----+-------------------+----------------+

Как я могу обновить столбец скомандовал в product_visited, if product_visited.idproduct = product_commanded.idproduct and product_visited.logdate = product_commanded.date

я запутался в использовании внутреннее соединение или же существует

я бы хотел update product_visited.commanded = 1 когда значение logdate а также idproduct существует в product_comaged, это также будет означать, что посещаемый продукт

0

Решение

Я считаю, что это то, что вы ищете:

Update product_visited pv
set commanded = 1
Where exists (Select 1
from product_commanded pc
where pv.idproduct = pc.idproduct and pv.logdate = pc.date
);
2

Другие решения

Хорошо, я угадал с полями соединения, но вы после чего-то вроде этого;

UPDATE pv
SET pv.Commanded = 1
FROM Product_Visited pv
JOIN Product_Commanded pc
ON pv.logdate = pc.date
AND pv.idproduct = pc.id

Внутреннее соединение означает, что вы собираетесь обновлять записи в Product_Visited только в том случае, если в Product_Comaged есть соответствующие строки на основе предикатов соединения, которые вы ему предоставили.

Примечание: это ответ SQL Server. Может или не может работать в MySQL

1

Похоже, вы хотите обновить commanded когда существует запись для того же продукта в commanded Таблица?

в любой базе данных:

Update product_visited set commanded = 1
Where exists(Select * from product_commanded
where product_id = product_visited.Product_id)
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector