日時に基づいて2つのイベント間に関連があるかどうかを(同じテーブルから)チェックする必要があります。
一方のデータセットには特定のイベントの終了日時が含まれ、他方のデータセットには他のイベントの開始日時が含まれます。
最初のイベントが2番目のイベントの前に完了したら、それらをリンクしたいと思います。
私がこれまでに持っているのは、
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クエリを実行できますか?
実際には、次の2つの方法のいずれかを実行できます。
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
トラア!それは素晴らしい作品です!
上記を理解した上で、あなたはあなたの仕事をするためにセットフィールドと "on"基準を修正することができます。また、チェックを実行してからデータを一時テーブルにプルしてから、上記の構文を使用してテーブル名と列名を置き換えて更新を実行することもできます。
私に知らせていないのであれば、うまくいくことを願っています。私はあなたのために正確な質問を書きます。
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 ;
2つのテーブルを一致させて更新する必要がある場合に、これが役立つことを願っています。
私は非常に複雑な加入に対する私自身の解決策を探すことにおいてこの質問を見つけました。これは私が役に立つかもしれないと考えた問題のより複雑なバージョンへの代替解決策です。
SKU(L1U1A1)を使用してアクティビティを識別できるように、アクティビティテーブルのproduct_idフィールドにデータを入力する必要があります。ここで、アクティビティはユニットで番号が付けられ、ユニットはレベルで番号が付けられますこれらの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];
このように内部結合を使用して、他のテーブルから値を更新できます。
UPDATE [table1_name] AS t1 INNER JOIN [table2_name] AS t2 ON t1.column1_name] = t2.[column1_name] SET t1.[column2_name] = t2.column2_name];
このクエリの使用方法を知るためにはここに従ってください http://www.voidtricks.com/mysql-inner-join-update/
またはサブクエリとしてselectを使ってこれを行うことができます。
UPDATE [table_name] SET [column_name] = (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) WHERE [column_name] = [value];
クエリはここで詳細に説明されています http://www.voidtricks.com/mysql-update-from-select/ /
あなたが使用することができます:
UPDATE Station AS st1, StationOld AS st2
SET st1.already_used = 1
WHERE st1.code = st2.code
同じテーブル
UPDATE PHA_BILL_SEGMENT AS PHA,
(SELECT BILL_ID, COUNT(REGISTRATION_NUMBER) AS REG
FROM PHA_BILL_SEGMENT
GROUP BY REGISTRATION_NUMBER, BILL_DATE, BILL_AMOUNT
HAVING REG > 1) T
SET PHA.BILL_DATE = PHA.BILL_DATE + 2
WHERE PHA.BILL_ID = T.BILL_ID;
以下のクエリで確認してください。
A. name_a = B.name_b set validation_check = if(start_dts> end_dts、 'VALID'、 '')でテーブルA A内部結合テーブルB Bを更新します
1つのテーブル自体に重複したエントリがあると問題がありました。以下は私にとって有効なアプローチです。 @sibazも提唱しています。
最後に、私は以下のクエリを使用してそれを解決しました:
選択クエリは一時テーブルに保存されます。
IF OBJECT_ID(N'tempdb..#New_format_donor_temp', N'U') IS NOT NULL
DROP TABLE #New_format_donor_temp;
select *
into #New_format_donor_temp
from DONOR_EMPLOYMENTS
where DONOR_ID IN (
1, 2
)
-- Test New_format_donor_temp
-- SELECT *
-- FROM #New_format_donor_temp;
一時テーブルは更新クエリで結合されます。
UPDATE de
SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD
FROM DONOR_EMPLOYMENTS AS de
INNER JOIN #New_format_donor_temp AS de_new ON de_new.EMP_NO = de.EMP_NO
WHERE
de.DONOR_ID IN (
3, 4
)
私はSQLの経験があまりありません。
上記のクエリはMySqlサーバー用です。