1

( ) と ( )netStreamの 2 つの外部キーを持つテーブル ( ) があります。logSessions_logSessionIDaccountSessions_accountSessionID

( logSessions_logSessionID) は必須です( ) は必須でaccountSessions_accountSessionIDはありません。

接続と非必須ステータスを示すブロックスキームの一部を次に示します。

ここに画像の説明を入力

(背景:logSessionsはすべての訪問者が持つセッションでaccountSessionsあり、ログイン セッションです。誰もがlogSession(誰もが訪問者であるため) を持っていますが、誰もがログインしているわけではないため、ログイン セッションはありませんaccountSession)

( ) に行を挿入したいのですがnetStream、すべての場合に ( logSession) がありますが、( ) とは異なりaccountSessionます。したがって、( ) がある場合はaccountSessionその ID も挿入し、( ) がない場合はaccountSessionそのフィールドを ( netStream) NULL のままにします。

ハッシュ値は に格納されBinary(x)ているため、 を使用しますUNHEX()

これは私が書いたMySQLです。エラーメッセージはありませんが、動作しません。何が問題ですか?

INSERT INTO `test-db`.`netStream` (`netStreamHash`, `logSessions_logSessionID`, `accountSessions_accountSessionID`)
    SELECT UNHEX("1faab"), `logSessions`.`logSessionID`, NULL FROM `logSessions` CROSS JOIN `accountSessions`
        WHERE `logSessions`.`logSessionHash` = UNHEX("aac") AND 
        `accountSessions`.`accountSessionHash` = UNHEX("2fb");
4

1 に答える 1

0

あなたが正しく理解しているなら、おそらくこのようなものを探しているでしょう

INSERT INTO `test-db`.`netStream` (
    `netStreamHash`, 
    `logSessions_logSessionID`, 
    `accountSessions_accountSessionID`)
SELECT UNHEX("1faab"), 
       (SELECT `logSessionID` FROM `logSessions` 
        WHERE `logSessionHash` = UNHEX("aac")),
       (SELECT `accountSessionID` FROM `accountSessions` 
        WHERE `accountSessionHash` = UNHEX("2fb"));

一致する行がない場合は、テーブルに挿入されaccountSessionsますNULLaccountSessions_accountSessionIDnetStream

于 2013-05-11T01:12:12.863 に答える