1

我有一个表 ( netStream),它有 2 个外键:( logSessions_logSessionID) 和 ( accountSessions_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那么您将被NULL插入accountSessions_accountSessionIDnetStream表中

于 2013-05-11T01:12:12.863 回答