我有两张桌子: 1-messages_system_data
CREATE TABLE IF NOT EXISTS `messages_system_data` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`msgId` int(11) NOT NULL,
`theSubject` varchar(250) NOT NULL,
`sentMemId` int(11) NOT NULL,
`receiveMemId` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
2 - 成员
CREATE TABLE IF NOT EXISTS `members` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`theName` varchar(150) NOT NULL,
PRIMARY KEY (`id`),
)
我需要检索发件人邮件名称和接收者按摩名称。 messages_system_data保留发送方和接收方ID的ID。我应该只使用一个sql命令。我这样写:
SELECT messages_system_data.theSubject, ?(here should be receiver ),?( sender name) FROM messages_system_data,members WHERE messages_system_data.sentMemId=members.id AND messages_system_data.receiveMemId=members.id LIMIT :limit, :offset
在这个sql中有两个成员表连接,我如何才能到达theName列的这个成员表?
答案 0 :(得分:0)
您的问题似乎是您不方便在同一查询中两次加入给定的表。在我看来,如果你使用显式连接语法而不是逗号语法,那么对这种事情(以及一般的连接)更容易准确。
SELECT
messages_system_data.theSubject,
sender.theName AS sender_name,
recipient.theName AS recipient_name
FROM
messages_system_data
JOIN members AS sender ON messages_system_data.sentMemId = sender.id
JOIN members AS recipient ON messages_system_data.receiveMemId = recipient.id
顺便提一下,为什么members.id
是BIGINT
但messages_system_data.sentMemId
和messages_system_data.receiveMemId
是INT
?它们应该是相同的类型。