1

2つのMySQLが正常に機能し、それらを1つのクエリに結合する方法を見つけようとしています。

まず、従業員のIDを選択します。

SELECT 'ID' FROM `employee` ORDER BY ID DESC LIMIT 1;

ID100を返すとしましょう。

次に、IDが100の従業員のデータを更新します

UPDATE 'LOG' SET `TIME_EXIT`='2013/02/22' WHERE `ID`='100';

すべてを1つのクエリで実行できますか?

4

2 に答える 2

5

それらを足し合わせるだけです:

UPDATE LOG SET TIME_EXIT = '2013/02/22' 
WHERE ID = (
              SELECT ID
              FROM employee
              ORDER BY ID DESC
              LIMIT 
            );

ただし、現在そのコードに基づいて更新されるのは最後のコードのみであるため、他の識別子を使用しemployeeて正しいものを選択し、正しいものであることを確認する必要があります。employee

UPDATE LOG SET TIME_EXIT = '2013/02/22' 
WHERE ID = (
              SELECT ID 
              FROM employee 
              WHERE NAME = 'JOHN SMITH' 
              ORDER BY ID DESC 
              LIMIT 1
            );
于 2013-02-22T02:03:05.733 に答える
0

今では数ヶ月ですが、あなたや他の人がグーグルでこれを見つけるのに役立つかもしれません…</ p>

同じ選択したテーブルのフィールドを更新する場合は、次を使用します。

UPDATE LOG SET
    TIME_EXIT = '2013/02/22' 
WHERE ID = (
        SELECT ID
        FROM (
            SELECT ID
            FROM LOG
            WHERE whatEverYouWantToCheck = whateverYouNeed
        ) AS innerResult 
    )

したがって、副選択からIDを選択します。直接サブ選択しようとすると、mySQLはエラーメッセージを表示しますYou can't specify target table 'log' for update in FROM clauseが、この方法ではサブサブクエリをサブクエリで非表示にすることができ、それで問題ないようです。AS innerResultエラーメッセージが表示されないようにすることを忘れないでください#1248 - Every derived table must have its own aliasSELECT COUNT(*)また、次のようなことを行う場合は、サブサブクエリフィールド名をサブクエリフィールド名と一致させます。SELECT CONCAT('#', ID)

于 2013-07-31T14:45:36.063 に答える