날짜-시간을 기준으로 두 이벤트 사이에 연관성이 있는지 확인하려면 (같은 테이블에서) 확인해야합니다.
한 데이터 세트에는 특정 이벤트의 종료 날짜 시간이 포함되고 다른 데이터 세트에는 다른 이벤트의 시작 날짜 시간이 포함됩니다.
첫 번째 이벤트가 두 번째 이벤트 전에 완료되면 이벤트를 연결하고 싶습니다.
내가 지금까지 가지고있는 것은 :
SELECT name as name_A, date-time as end_DTS, id as id_A
FROM tableA WHERE criteria = 1
SELECT name as name_B, date-time as start_DTS, id as id_B
FROM tableA WHERE criteria = 2
그런 다음 그들과 합류합니다.
SELECT name_A, name_B, id_A, id_B,
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B
그런 다음 validation_check 필드를 기반으로 SELECT 중첩 된 UPDATE 쿼리를 실행할 수 있습니까?
답변
실제로 다음 두 가지 방법 중 하나를 수행 할 수 있습니다.
MySQL 업데이트 조인 구문 :
UPDATE tableA a
INNER JOIN tableB b ON a.name_a = b.name_b
SET validation_check = if(start_dts > end_dts, 'VALID', '')
-- where clause can go here
ANSI SQL 구문 :
UPDATE tableA SET validation_check =
(SELECT if(start_DTS > end_DTS, 'VALID', '') AS validation_check
FROM tableA
INNER JOIN tableB ON name_A = name_B
WHERE id_A = tableA.id_A)
가장 자연스러워 보이는 것을 선택하십시오.
답변
UPDATE
`table1` AS `dest`,
(
SELECT
*
FROM
`table2`
WHERE
`id` = x
) AS `src`
SET
`dest`.`col1` = `src`.`col1`
WHERE
`dest`.`id` = x
;
이것이 효과가 있기를 바랍니다.
답변
MySQL에서 쉬움 :
UPDATE users AS U1, users AS U2
SET U1.name_one = U2.name_colX
WHERE U2.user_id = U1.user_id
답변
누군가가 어떤 테이블을 대상으로하든 관계없이 한 데이터베이스에서 다른 데이터베이스로 데이터를 업데이트하려는 경우 몇 가지 기준이 있어야합니다.
이것은 모든 수준에서 더 좋고 깨끗합니다.
UPDATE dbname1.content targetTable
LEFT JOIN dbname2.someothertable sourceTable ON
targetTable.compare_field= sourceTable.compare_field
SET
targetTable.col1 = sourceTable.cola,
targetTable.col2 = sourceTable.colb,
targetTable.col3 = sourceTable.colc,
targetTable.col4 = sourceTable.cold
트라 아! 잘 작동합니다!
위의 이해를 통해 작업을 수행하기 위해 설정된 필드와 “설정”기준을 수정할 수 있습니다. 검사를 수행 한 다음 임시 테이블로 데이터를 가져온 다음 테이블과 열 이름을 바꾸는 위의 구문을 사용하여 업데이트를 실행할 수도 있습니다.
알려지지 않으면 작동하기를 바랍니다. 나는 당신을 위해 정확한 질문을 쓸 것입니다.
답변
UPDATE
receipt_invoices dest,
(
SELECT
`receipt_id`,
CAST((net * 100) / 112 AS DECIMAL (11, 2)) witoutvat
FROM
receipt
WHERE CAST((net * 100) / 112 AS DECIMAL (11, 2)) != total
AND vat_percentage = 12
) src
SET
dest.price = src.witoutvat,
dest.amount = src.witoutvat
WHERE col_tobefixed = 1
AND dest.`receipt_id` = src.receipt_id ;
두 테이블을 일치시키고 업데이트 해야하는 경우 이것이 도움이되기를 바랍니다.
답변
이 질문은 매우 복잡한 조인에 대한 내 자신의 솔루션을 찾는 데 있습니다. 이것은 더 복잡한 버전의 문제에 대한 대안 솔루션이며 유용하다고 생각했습니다.
액티비티 테이블에서 product_id 필드를 채워야하는데, 액티비티는 단위로 번호가 매겨지고 단위는 레벨 (문자열 ?? N로 식별)로 번호가 매겨져 SKU, 즉 L1U1A1을 사용하여 액티비티를 식별 할 수 있습니다. 그런 다음 해당 SKU는 다른 테이블에 저장됩니다.
activity_id와 product_id의 목록을 얻기 위해 다음을 식별했습니다.
SELECT a.activity_id, w.product_id
FROM activities a
JOIN units USING(unit_id)
JOIN product_types USING(product_type_id)
JOIN web_products w
ON sku=CONCAT('L',SUBSTR(product_type_code,3), 'U',unit_index, 'A',activity_index)
나는 그것이 mysql 내의 SELECT에 통합하기에는 너무 복잡하다는 것을 알았으므로 임시 테이블을 만들고 그것을 update 문과 결합했다.
CREATE TEMPORARY TABLE activity_product_ids AS (<the above select statement>);
UPDATE activities a
JOIN activity_product_ids b
ON a.activity_id=b.activity_id
SET a.product_id=b.product_id;
누군가가 이것을 유용하게 사용하기를 바랍니다.
답변
UPDATE [table_name] AS T1,
(SELECT [column_name]
FROM [table_name]
WHERE [column_name] = [value]) AS T2
SET T1.[column_name]=T2.[column_name] + 1
WHERE T1.[column_name] = [value];
