我有一个表(netStream
),它有2个外键:(logSessions_logSessionID
)和(accountSessions_accountSessionID
)。
(logSessions_logSessionID
)是强制性的,(accountSessions_accountSessionID
)不是强制性的。
以下是显示连接和非强制状态的块方案的一部分:
(背景:logSessions
是每个访问者拥有的会话,accountSessions
是登录会话。每个人都有logSession
(因为每个人都是访问者),但不是每个人都是登录后,他们没有accountSession
)
我想在(netStream
)中插入一行,在每种情况下都有一个(logSession
),但它与(accountSession
)不一样。所以,当有(accountSession
)时,我也要插入那个ID,如果没有(accountSession
),那么只需将该字段保留在(netStream
)中。< / p>
哈希值存储在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");
答案 0 :(得分: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_accountSessionID
中插入netStream